知识卡片
装饰模式是继承的动态可撤销替代方案
内容
[[装饰模式的定义与四个角色]]相对继承最根本差异是”静态vs动态”:继承编译期把功能固定死, 去掉某层需要改代码重新编译;装饰在运行期组合对象,去掉某层修饰只需少包一层,不用碰既有 代码。若继承链很深,直接改中间层会连带影响所有子类,改用装饰类包装则不触碰原有继承体系, 符合[[开闭原则的定义]]。发散:装饰模式常被称为”继承的有力补充”而非”替代品”。
参考来源
- 位置:《设计模式之禅(第2版)》第17章《装饰模式》(源文件:_epub-src/text/part0079.html)
- 结论依据:原文明确"继承是静态地给类增加功能,而装饰模式则是动态地增加功能……我不想要SortDecorator这层的封装也很简单,于是直接在Father中去掉就可以了,如果你用继承就必须修改程序",并用Father-Son-GrandSon三层继承为例说明直接修改Son类的高风险,建议用SonDecorator类替代。
- 原始内容:继承是静态地给类增加功能,而装饰模式则是动态地增加功能……通过建立SonDecorator类来修饰Son,相当于创建了一个新的类,这个对原有程序没有变更,通过扩展很好地完成了这次变更。