设计模式-结构型-组合模式(Composite)
参考文献
组合模式
- 允许将对象组织成树形结构,以表示“整体-部分”层次关系,并且能够以统一的方式处理单个对象和组合对象.
组件
- 组件(
Component
):抽象类或接口,定义了组合中所有对象共有的操作,可以是抽象类或接口.它可以包含对子组件进行管理的方法,比如添加、删除、获取子组件等. - 叶子节点(
Leaf
):代表组合中的叶子对象,叶子节点没有子节点,实现了组件的操作方法. - 容器节点(
Composite
):代表组合中的容器对象,可以包含子节点,实现了组件的操作方法.容器节点可以存储叶子节点和其他容器节点,形成树形结构. - 客户端(
Client
):使用组合模式的外部代码,通过组件接口操作组合对象.客户端通常无法区分处理的是单个对象还是组合对象,因为它们都遵循同样的接口
实现方式
- 使用抽象类或接口定义组件(
Component
),其中包含对子组件的管理方法,如添加、删除、获取子组件等. - 创建叶子节点(
Leaf
)类,实现组件接口并实现相关操作方法.叶子节点表示组合中的叶子对象,它没有子节点. - 创建容器节点(
Composite
)类,实现组件接口并实现相关操作方法.容器节点表示组合中的容器对象,它可以包含子节点,形成树形结构. - 在容器节点中维护一个子组件列表,并在相关操作方法中调用子组件的操作方法.
1 | // 组件接口 |
使用场景
- 需要表示对象的层次结构,并希望以统一的方式对单个对象和组合对象进行操作.
- 需要对一个对象集合进行递归操作,并且不关心其具体类型.
- 希望客户端能够以一致的方式处理组合对象和单个对象.
- 需要灵活地组织和管理对象的层次结构.
- 需要对树形结构进行遍历、搜索、过滤等操作.
- 实际场景举例:
- 文件系统中的目录和文件的层次结构.
- 组织机构中的部门和员工的关系.
- 菜单和子菜单的层次结构.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!