1. 程式人生 > 其它 >華為機試題目11-20題

華為機試題目11-20題

介紹

用於把一組相似的物件當作一個單一的物件,通常以樹形解構來組合物件,用於表示部分以及整體層次。

意圖

將物件組合成樹形解構表示“部分-整體”的結構層次。組合模式是的用於對單個物件和組合物件的使用具有一致性。

解決

它在我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。

優點

  1. 高層模組呼叫簡單;
  2. 節點自由增加。

缺點

  1. 在使用組合模式時,其葉子和樹枝的宣告都是實現類,而不是介面,違反了依賴倒置原則。

使用場景

部分、整體場景,如樹形選單,檔案、資料夾的管理。

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);
                }
            }
        }
    }
}