11.组合模式设计思想
目录介绍
- 01.组合模式基础
- 1.1 组合模式由来
- 1.2 组合模式定义
- 1.3 组合模式场景
- 1.4 组合模式思考
- 1.5 解决的问题
- 02.组合模式实现
- 2.1 罗列一个场景
- 2.2 组合结构
- 2.3 组合基本实现
- 2.4 有哪些注意点
- 03.组合实例演示
- 3.1 需求分析
- 3.2 代码案例实现
- 3.3 是否可以优化
- 3.4 组合设计
- 3.5 演变代码案例
- 04.组合实现方式
- 4.1 透明式组合
- 4.2 安全式组合
- 05.组合模式分析
- 5.1 组合模式优点
- 5.2 组合模式缺点
- 5.3 适用环境
- 5.4 模式拓展
- 5.5 使用建议说明
- 06.外观代理总结
- 6.1 总结一下学习
- 6.2 更多内容推荐
01.组合模式基础
1.1 组合模式由来
客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。
如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?
1.2 组合模式定义
定义:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
1.3 组合模式场景
使用场景
- 当需要表示对象的层次结构时,如文件系统或组织结构。
- 当希望客户端代码能够以一致的方式处理树形结构中的所有对象时。
1.4 组合模式思考
1.5 解决的问题
主要解决的问题
- 简化树形结构中对象的处理,无论它们是单个对象还是组合对象。
- 解耦客户端代码与复杂元素的内部结构,使得客户端可以统一处理所有类型的节点。
02.组合模式实现
2.1 罗列一个场景
2.2 组合结构
组合模式包含如下角色:
- 组件(Component): 定义了组合中所有对象的通用接口,可以是抽象类或接口。它声明了用于访问和管理子组件的方法,包括添加、删除、获取子组件等。
- 叶子节点(Leaf): 表示组合中的叶子节点对象,叶子节点没有子节点。它实现了组件接口的方法,但通常不包含子组件。
- 复合节点(Composite): 表示组合中的复合对象,复合节点可以包含子节点,可以是叶子节点,也可以是其他复合节点。它实现了组件接口的方法,包括管理子组件的方法。
- 客户端(Client): 通过组件接口与组合结构进行交互,客户端不需要区分叶子节点和复合节点,可以一致地对待整体和部分。
2.3 组合基本实现
2.4 有哪些注意点
04.组合实现方式
4.1 透明式组合
4.2 安全式组合
05.组合模式分析
5.1 组合模式优点
- 使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
- 更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。
5.2 组合模式缺点
- 组合模式不容易限制组合中的构件。
5.3 适用环境
5.4 模式拓展
5.5 使用建议说明
在设计时,优先使用接口而非具体类,以提高系统的灵活性和可维护性。
适用于需要处理复杂树形结构的场景,如文件系统、组织结构等。