简介
它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
树以及菜单结构都是组合模式最好的展示,不管那一层的构建都可以抽象在一起
例子
public class TreeNode {
//节点名称
private String name;
//子节点
private List<TreeNode> children;
//构造方法
public TreeNode(String name) {
this.name = name;
this.children = new ArrayList<>();
}
public void add (TreeNode node) {
this.children.add(node);
}
public void remove(TreeNode node) {
this.children.remove(node);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
@Override
public String toString() {
return "TreeNode{" +
"name='" + name + '\'' +
", children=" + children +
'}';
}
}
- 测试
public class Main {
public static void main(String[] args) {
TreeNode a = new TreeNode("A");
TreeNode b = new TreeNode("B");
TreeNode c = new TreeNode("C");
TreeNode d = new TreeNode("D");
TreeNode e = new TreeNode("E");
a.add(b);
a.add(c);
c.add(d);
c.add(e);
System.out.println(a);
//TreeNode{name='A', children=[TreeNode{name='B', children=[]}, TreeNode{name='C', children=[TreeNode{name='D', children=[]}, TreeNode{name='E', children=[]}]}]}
c.remove(e);
System.out.println(a);
//TreeNode{name='A', children=[TreeNode{name='B', children=[]}, TreeNode{name='C', children=[TreeNode{name='D', children=[]}]}]}
}
}