知识卡片
用继承叠加修饰导致类爆炸与顺序僵化
内容
给成绩单叠加汇报顺序修饰,最直接办法是新建继承子类硬编码调用顺序。但修饰需求增多时子类 数量随组合爆炸,且执行顺序被硬编码死在子类里,无法运行时调整或撤销。发散:当”功能增强” 组合数量随维度增多指数级增长、且需要运行期灵活拼装/撤销时,继承子类化会迅速变得不可 维护,这是识别该用装饰模式的信号。
参考来源
- 位置:《设计模式之禅(第2版)》第17章《装饰模式》(源文件:_epub-src/text/part0076.html)
- 结论依据:原文展示SugarFouthGradeSchoolReport继承子类硬编码"先说最高分、后看成绩单、再说排名"的固定顺序,并指出"一旦需要装饰的条件非常多……你想象的子类有多少个?你是不是马上就要崩溃了!……如果超过两层继承,你就应该想想是不是出设计问题了"。
- 原始内容:由于汇报的内容已经发生变更,那所以要重写父类……一旦需要装饰的条件非常多,比如20个,你还通过继承来解决,你想象的子类有多少个?你是不是马上就要崩溃了!……如果超过两层继承,你就应该想想是不是出设计问题了。