知识卡片
组合模式的优缺点与适用信号
内容
[[组合模式的定义与三个角色]]带来两点收益:高层模块调用简单(单个对象和整体子树无区别); 节点自由增加(符合开闭原则)。代价是场景类通常需要直接引用具体实现类,与依赖倒置原则有 张力。适用信号很直接:只要数据天然构成树形结构(如树形菜单、文件系统、组织架构)就该 考虑。发散:这条适用信号比多数模式更硬性——可以直接从数据形态本身识别出来。
参考来源
- 位置:《设计模式之禅(第2版)》第21章《组合模式》(源文件:_epub-src/text/part0096.html)
- 结论依据:原文列出两点优点(高层模块调用简单、节点自由增加)、一点缺点(场景类直接使用实现类与依赖倒置原则冲突),并给出使用场景和注意事项"只要是树形结构,就要考虑使用组合模式"。
- 原始内容:高层模块不必关心自己处理的是单个对象还是整个组合结构……只要找到它的父节点就成,非常容易扩展,符合开闭原则……直接使用了实现类!这在面向接口编程上是很不恰当的,与依赖倒置原则冲突……只要是树形结构,就要考虑使用组合模式。