组合模式(Composite Pattern)是一种结构型设计模式,核心思想是:
将对象组合成树形结构,以表示“部分—整体”的层次关系,并让客户端以一致的方式对待单个对象和组合对象。
下面从典型应用场景 + 实际例子来说明。
✅ 目标:对单个对象和组合对象一视同仁
适合:
✅ 文件系统示例
Folder
├── File
├── File
└── Folder
├── File
└── File
组合模式可以让 Folder 和 File 都实现同一个接口(如 show()、size())。
特点:
size = file.size()
size = folder.size() + sum(child.size())
✅ 组合模式天然支持递归结构
场景:
✅ 统一调用 render() / update()
场景:
菜单
├── 新建
├── 打开
└── 最近打开
├── 文件1
└── 文件2
✅ 统一处理点击、显示、权限控制
场景:
适合:
⚠️ 注意:
如果叶子节点和组合节点行为差异很大,不适合组合模式
| 情况 | 原因 |
|---|---|
| 叶子节点和组合节点行为差异很大 | 强行统一接口会违反单一职责 |
| 不需要树形结构 | 过度设计 |
| 子节点类型非常复杂 | 组合模式会让系统变复杂 |
✅ 组合模式适合“整体—部分”结构,并且希望用统一方式处理它们
当你发现自己在写
if (isLeaf)、if (isComposite)时,往往就是组合模式登场的时候。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。