组合模式(Composite Pattern)是一种结构型设计模式,核心思想是:
将对象组织成树形结构,使客户端可以“统一对待”单个对象和对象组合。
当你需要把“单个对象”和“对象集合”一视同仁地处理,并且它们之间存在“整体—部分”关系时,就适合用组合模式。
如:
✅ 特点:
问题:
if (obj is File) {
file.read();
} else if (obj is Directory) {
directory.readAll();
}
组合模式解决:
component.read();
✅ 优点:
if/else 或 instanceof如:
Root
├─ A
├─ B
│ ├─ B1
│ └─ B2
└─ C
组合模式天然支持递归。
例如:
如果:
✅ 非常适合组合模式
| 情况 | 原因 |
|---|---|
| 叶子节点和组合节点行为差异很大 | 强行统一接口会导致“空实现” |
| 不希望子节点有父引用 | 组合模式常需要维护父子关系 |
| 结构非常扁平 | 没必要引入复杂度 |
| 性能敏感且递归层级很深 | 递归可能带来风险 |
所有方法都定义在抽象组件中
interface Component {
void add(Component c);
void remove(Component c);
void operation();
}
只在组合节点中定义管理子节点的方法
interface Component {
void operation();
}
File
Folder
component.show();
如果你在画树形结构图,并且想“统一处理节点”,就考虑组合模式。
如果你愿意,我也可以用 Java / Python / UML 给你画一个完整示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。