组合模式
1、解决什么问题?
当我们的要处理的对象可以生成一颗树形结构,而我们要对树上的节点和叶子进行操作时,它能够提供一致的方式,而不用考虑它是节点还是叶子。
2、什么是组合模式?
允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及组合对象。
3、UML图
组合模式包含如下角色:
- Component :抽象构件角色
- Leaf:叶子构件角色(相当于叶子)
- Composite:树枝或容器角色(相当于非叶子节点)
4、使用场景
- 资源管理器
- XML文件解析
- 组织架构处理
- JUnit框架:TestCase(叶子)、TestUnit(容器)
5、优缺点
优点:
- 简化客户端操作。客户端只需要面对一致的对象。
- 具有较强的扩展性。当我们要更改组合对象时,我们只需要调整内部的层次关系,客户端不用做出任何改动。
- 方便创建出复杂的层次结构。客户端不用理会组合里面的组成细节,容易添加节点或者叶子从而创建出复杂的树形结构。
缺点:
- 要求较高的抽象性,如果节点和叶子有很多差异性的话,比如很多方法和属性都不一样,难以实现组合模式。