組合模式(Composite)

Seasons20發表於2019-01-19

組合模式

一.組合模式

1.1 定義

  • 將物件組合成樹形結構以表示“部分-整體”的層次結構.
  • 組合模式使得使用者對單個物件和組合物件的使用具有一致性.

二.實現

2.1 建立節點類

    public class Node {
        private String id;
        private String name;
        private String parentId;
        private List<Node> children = new ArrayList<>();
        public Node(String id, String name, String parentId) {
            this.id = id;
            this.name = name;
            this.parentId = parentId;
        }
        //getter,setter方法
        public void add(Node node){
            List<Node> nodeList = this.getChildren();
            nodeList.add(node);
            this.setChildren(nodeList);
        }
        public void print(){
            System.out.println("node:" + getName());
            for(Node node : children){
                node.print();
            }
        }
    }

2.2 呼叫

    public static void main(String[] args) {
        Node node = new Node("1", "root", "");
        Node node1 = new Node("2", "composite1", "1");
        Node node2 = new Node("3", "leaf1", "1");
        Node node3 = new Node("4", "leaf2", "2");
        node1.add(node3);
        node.add(node1);
        node.add(node2);
        node.print();
    }

2.3 輸出

    node:root
    node:composite1
    node:leaf2
    node:leaf1

三.優缺點

3.1 優點

  • 呼叫簡單.
  • 節點自由增加.

3.2 缺點

  • 類間組合,違反依賴倒置原則.

四.原始碼


    https://github.com/Seasons20/DisignPattern.git

END

相關文章