如何通过组合模式统一处理树形结构对象的层级一致性操作?
- 内容介绍
- 相关推荐
本文共计734个文字,预计阅读时间需要3分钟。
核心在于定义一个统一接口或抽象类,使叶子节点和容器节点都实现它,客户端端只面向这个接口编程,不关心具体类型。
明确三个关键角色
组合模式围绕 Component(抽象构件)、Leaf(叶子构件)、Composite(容器构件)展开:
- Component:声明通用操作,比如 display()、add()、remove()。它不强制所有子类都实现增删——这取决于你选透明方式还是安全方式
- Leaf:代表终端节点,如文件、菜单项、员工。它只实现自身行为(如 display()),对 add()/remove() 可抛异常或空实现
- Composite:代表分支节点,如文件夹、菜单组、部门。它持有一个 Component 列表,负责递归调用子节点的相同方法
选择透明方式还是安全方式
两种实现路径影响接口设计和调用逻辑:
- 透明方式:Component 中定义全部方法(包括 add/remove),Leaf 也必须实现它们(哪怕只是抛 UnsupportedOperationException)。
本文共计734个文字,预计阅读时间需要3分钟。
核心在于定义一个统一接口或抽象类,使叶子节点和容器节点都实现它,客户端端只面向这个接口编程,不关心具体类型。
明确三个关键角色
组合模式围绕 Component(抽象构件)、Leaf(叶子构件)、Composite(容器构件)展开:
- Component:声明通用操作,比如 display()、add()、remove()。它不强制所有子类都实现增删——这取决于你选透明方式还是安全方式
- Leaf:代表终端节点,如文件、菜单项、员工。它只实现自身行为(如 display()),对 add()/remove() 可抛异常或空实现
- Composite:代表分支节点,如文件夹、菜单组、部门。它持有一个 Component 列表,负责递归调用子节点的相同方法
选择透明方式还是安全方式
两种实现路径影响接口设计和调用逻辑:
- 透明方式:Component 中定义全部方法(包括 add/remove),Leaf 也必须实现它们(哪怕只是抛 UnsupportedOperationException)。

