華為機試題目11-20題
阿新 • • 發佈:2022-03-03
介紹
用於把一組相似的物件當作一個單一的物件,通常以樹形解構來組合物件,用於表示部分以及整體層次。
意圖
將物件組合成樹形解構表示“部分-整體”的結構層次。組合模式是的用於對單個物件和組合物件的使用具有一致性。
解決
它在我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。
優點
- 高層模組呼叫簡單;
- 節點自由增加。
缺點
- 在使用組合模式時,其葉子和樹枝的宣告都是實現類,而不是介面,違反了依賴倒置原則。
使用場景
部分、整體場景,如樹形選單,檔案、資料夾的管理。
UML
示例
樹節點 TreeNode.java
package cn.geoaryblog.design.cretedg.composite; import java.util.ArrayList; import java.util.List; public class TreeNode { private String name; private List<TreeNode> treeNodeList = null; public TreeNode(String name) { this.name = name; } public String getName() { return name; } public List<TreeNode> getTreeNodeList() { return treeNodeList; } public synchronized void addNode(TreeNode treeNode){ if (treeNodeList == null){ treeNodeList = new ArrayList<>(); } treeNodeList.add(treeNode); } @Override public String toString() { return "TreeNode{" + "name='" + name + '\'' + '}'; } }
客戶端 Clinet.java
package cn.geoaryblog.design.cretedg.composite; public class Clinet { public static void main(String[] args) { TreeNode rootNode = new TreeNode("根節點"); TreeNode cDisk = new TreeNode("c盤"); TreeNode dDisk = new TreeNode("d盤"); TreeNode programFile = new TreeNode("Program Files"); dDisk.addNode(programFile); rootNode.addNode(cDisk); rootNode.addNode(dDisk); System.out.println(rootNode); for(TreeNode rootSub: rootNode.getTreeNodeList()){ System.out.println(rootSub); if(rootSub.getName() == "d盤"){ for(TreeNode dp: dDisk.getTreeNodeList()){ System.out.println(dp); } } } } }