1、组合模式的概念
组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。
组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。
2、组合模式的角色
a、组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。
b、叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。
c、合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。
3、组合模式的结构图
4、组合模式的优点
a、组合模式使得客户端代码可以一致地处理对象和对象容器,无需关系处理的单个对象,还是组合的对象容器。
b、将”客户代码与复杂的对象容器结构“解耦。
c、可以更容易地往组合对象中加入新的构件。
5、组合模式的缺点
使得设计更加复杂。客户端需要花更多时间理清类之间的层次关系。(这个是几乎所有设计模式所面临的问题)
6、组合模式的使用场景
a、当想表达对象的部分-整体的层次结构时。
b、希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象时。
7、组合模式需要注意的问题
a、有时候系统需要遍历一个树枝结构的子构件很多次,这时候可以考虑把遍历子构件的结构存储在父构件里面作为缓存。
b、客户端尽量不要直接调用树叶类中的方法,而是借用其父类的多态性完成调用,这样可以增加代码的复用性。