设计模式—组合模式

定义

将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性

代码

抽象通用功能

1
2
3
4
5
public abstract class Component {
public void doSomething(){
System.out.println("do something");
}
}

叶子构件

1
2
3
4
5
6
public class Leaf extends Component {
@Override
public void doSomething() {
System.out.println("leaf do something");
}
}

树枝构件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Composite extends Component {
private ArrayList<Component> componentArrayList = new ArrayList<>();

public void add(Component component){
this.componentArrayList.add(component);
}

public void remove(Component component){
this.componentArrayList.remove(component);
}

public ArrayList<Component> getChildren() {
return this.componentArrayList;
}
}

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class CompositeTest {

@Test
public void testComposite(){
//根
Composite root = new Composite();
//枝
Composite branch = new Composite();
//叶
Leaf leaf = new Leaf();
root.add(branch);
branch.add(leaf);

display(root);
}

public static void display(Composite root){
for (Component component : root.getChildren()) {
if(component instanceof Leaf){
component.doSomething();
}else{
display((Composite) component);
}
}
}
}