知识卡片
安全模式与透明模式的权衡
内容
[[组合模式的定义与三个角色]]有两种实现:安全模式把组合管理方法只放在Composite类里, Leaf不用实现,类型安全但调用方需要instanceof判断;透明模式把这些方法提到抽象Component 类,Leaf空实现抛异常,遵循[[依赖倒置原则的三层含义与Java体现]]但误用只有运行期才暴露。 发散:这是”类型安全”与”接口一致性”的经典取舍,没有绝对更优的一方。
参考来源
- 位置:《设计模式之禅(第2版)》第21章《组合模式》(源文件:_epub-src/text/part0097.html)
- 结论依据:原文对比安全模式(组合方法只在树枝节点、需要强制类型转换)与透明模式(组合方法在抽象类中、叶子节点空实现抛UnsupportedOperationException),并说明"透明模式的好处就是它基本遵循了依赖倒转原则,方便系统进行扩展"。
- 原始内容:透明模式是把用来组合使用的方法放到抽象类中……安全模式就不同了,它是把树枝节点和树叶节点彻底分开,树枝节点单独拥有用来组合的方法,这种方法比较安全……透明模式的好处就是它基本遵循了依赖倒转原则,方便系统进行扩展。