设计模式11-组合模式

定义

组合模式是将一组相似的对象,当作一个单一的对象进行树形层次构建,然后进行统一处理

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Employee{
private String name;
private List<Employee> subordinates;

public Employee(String name){
this.name = name;
subordinates = new ArrayList<Employee>();
}

public void add(Employee e){
subordinates.add(e);
}

public void remove(Employee e){
subordinates.remove(e);
}

public List<Employee> getSubordinates(){
return subordinates;
}
}

很明显,组合者是一个树形的结构,每个组合者是一个树节点。

1
2
3
4
5
6
7
public static void main(String[] args){
Employee Boss = new Employee("boss");
Employee manager = new Employee("manager");
Boss.add(manager);
Employee me = new Employee("me");
manager.add("me");
}

这样子,就将boss, manager,和me三个对象组合到一起了。但是事实上看起来是有些奇怪的,如果拓展方法,会发现所有人的方法都是固定的,不是很好进行专门的定制化拓展。

在Android中比较经典的就是view的绘制机制,所有的view也是树状结构进行编排,然后由顶开始进行绘制。

优点

1、调用方式简单,只需要高层调用即可
2、可以自由增加节点

缺点

组合模式处理的都是实现类,并非接口,违反了依赖倒置原则,后期拓展接口相对来讲比较困难。