Java设计模式之组合模式(Composite)实践

       组合模式定义:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
       项目中的部分、整体场景,如树形菜单结构、文件夹管理等,可以考虑使用组合模式。

以下代码演示组合模式简单的实际运用:

定义一个接口Node:
package com.ldl.cn.CompositeModel;

public interface Node {

    public void add(Node node);
    public void remove(Node node);
    public Node getChild(int i);
    public void operation();
}

分别定义BranchNode、LeafNode实现Node:
package com.ldl.cn.CompositeModel;

import java.util.ArrayList;

public class BranchNode implements Node{

    private ArrayList childrenNode = new ArrayList<>();
    
    @Override
    public void add(Node node) {
        childrenNode.add(node);
    }

    @Override
    public void remove(Node node) {
        childrenNode.remove(node);
    }

    @Override
    public Node getChild(int i) {
        return childrenNode.get(i);
    }

    @Override
    public void operation() {
        for (Node node : childrenNode) {
            node.operation();
        }
    }
}

package com.ldl.cn.CompositeModel;

public class LeafNode implements Node{

    private String name;
    
    public LeafNode(String name) {
        super();
        this.name = name;
    }

    @Override
    public void add(Node node) {
    }

    @Override
    public void remove(Node node) {
    }

    @Override
    public Node getChild(int i) {
        return null;
    }

    @Override
    public void operation() {
        System.out.println("访问:"+name);
    }
}

编写测试类:
package com.ldl.cn.CompositeModel;

public class TestCompositePattern {

    public static void main(String[] args) {
        
        Node node1 =new BranchNode(); 
        Node node2 =new BranchNode(); 
        Node leafNode1=new LeafNode("叶子节点1"); 
        Node leafNode2=new LeafNode("叶子节点2"); 
        Node leafNode3=new LeafNode("叶子节点3");          
        node1.add(leafNode1); 
        node1.add(node2);
        
        node2.add(leafNode2); 
        node2.add(leafNode3);          
        node1.operation(); 
        System.out.println("-------------");
        node2.operation();
    }
}

运行结果:
访问:叶子节点1
访问:叶子节点2
访问:叶子节点3
-------------
访问:叶子节点2
访问:叶子节点3

你可能感兴趣的:(Java设计模式实践)