目录
什么是组合模式
由每一个单元节点,组合成一个整体节点,这种对单个节点的结构存储和对整体节点的存储和处理逻辑保持一致的设计模式便是组合设计模式。
为什么要用组合模式
应用中有很多场景会用到组合模式,例如树状存储的结构,比如多级菜单,每一层级菜单的处理都可以抽象保持一致。比如企业的组织架构,员工都具有一些共同的属性,而区别在于相应有无下属员工。
组合模式组成
抽象节点
public abstract class Node {
protected String name;
public Node(String name) {
this.name = name;
}
public void info() {
System.out.println(String.format("node name %s", name));
}
public abstract void add(Node node);
public abstract void remove(Node node);
public abstract List<Node> getChildren();
}
具体节点
public class NodeObj extends Node {
private List<Node> children = new ArrayList<>();
public NodeObj(String name) {
super(name);
}
@Override
public void add(Node node) {
this.children.add(node);
}
@Override
public void remove(Node node) {
this.children.remove(node);
}
@Override
public List<Node> getChildren() {
return this.children;
}
}
测试驱动
public class Client {
public static void main(String[] args) {
Node root = new NodeObj("root");
Node c1 = new NodeObj("c1");
Node c11 = new NodeObj("c11");
Node c12 = new NodeObj("c12");
c1.add(c11);
c1.add(c12);
Node c2 = new NodeObj("c2");
root.add(c1);
root.add(c2);
displey(root);
}
public static void displey(Node root) {
root.info();
if (root.getChildren().size() > 0) {
for (Node node : root.getChildren()) {
displey(node);
}
}
}
}