概述
- 定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构, 使得客户端对单个对象和组合对象的使用具有一致性。
- 组合模式又可以称为“整体—部分”(Part-Whole)模式。
- 处理树形结构,枝干节点类,聚合所有节点。提供递归遍历。
- 是一种对象结构型模式。
- 学习难度:★★★☆☆
- 使用频率:★★★★☆
优缺点
类图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e596775a42f4f14076f49c1e81ac511b.png)
组成角色
- 抽象构件角色(Component)
- 叶子构件(Leaf)
- 树枝构件(Composite)
Code Example
抽象构件角色(Component)
public interface Root {
public boolean addNode(Root node);
public boolean removeNode(Root node);
public List<Root> getNode();
public void display(Integer level);
}
叶子构件(Leaf)
public class Leafage implements Root {
private String name;
public Leafage(String name) {
this.name = name;
}
public boolean addNode(Root node) {
return false;
}
public void display(Integer level) {
String space = "";
for (int i = 0; i < level; i++) {
space += "-";
}
System.out.println(space + name);
}
public List<Root> getNode() {
return null;
}
public boolean removeNode(Root node) {
return false;
}
}
树枝构件(Composite)
public class Branch implements Root {
private String name;
private List<Root> branchs;
public Branch(String name) {
this.name = name;
this.branchs = new ArrayList<Root>();
}
public boolean addNode(Root node) {
return branchs.add(node);
}
public void display(Integer level) {
String space = "";
for (int i = 0; i < level; i++) {
space += "-";
}
System.out.println(space + name);
for (Root branch : branchs) {
branch.display(level + 2);
}
}
public List<Root> getNode() {
return branchs;
}
public boolean removeNode(Root node) {
return branchs.remove(node);
}
}
客户端
public class CompositePattern {
public static void main(String[] args) {
Root root1 = new Branch("c:\\");
Root win1 = new Branch("windows");
Root sys1 = new Branch("system");
Root sys2 = new Branch("system2");
Root hw1 = new Leafage("HelloWorld.java");
root1.addNode(win1);
root1.addNode(sys1);
win1.addNode(hw1);
win1.addNode(sys2);
root1.display(0);
}
}