组合模式定义:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
项目中的部分、整体场景,如树形菜单结构、文件夹管理等,可以考虑使用组合模式。
以下代码演示组合模式简单的实际运用:
定义一个接口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
@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