我目前正在研究 Decorator 设计模式,这个想法困扰着我很多。
只拥有一个具有与其特性对应的 boolean 值的基类会更容易吗?
例如: textview,如果textview基类有canVerScroll、canHorScroll、hasBorder的BOOL,则可以有垂直滚动、水平滚动、边框等;为什么这不比 Decorator 设计模式更好?
感谢您的帮助!
最佳答案
Would it be easier just to have one base class with boolean value corresponding to its feature?
这将违反称为开放-封闭 原则的SOLID 原则。 Open-Closed 原则指出组件应该对扩展开放但对修改关闭。如果您只有一个 TextView
类,则每次您想在 TextView 中引入新行为时都需要更改它。
why is this not better than Decorator design pattern?
假设您的 API 用户(无法访问您的 API 源代码)想要为 TextView
类引入一种名为Rotate 360 degrees 的新行为.他们在这里有两个选择,要么等待您将新的 BOOL
添加到 TextView
基类并支持此功能,要么想出一种方法在你的 TextView
。他们可以选择的一个选项是创建一个 TextViewAdapter
(阅读 Adapter pattern),这将允许他们在您提供的功能之外添加所需的功能。
如果您提供开箱即用的扩展 API 的能力,而不是创建一个没有您的干预就无法扩展的 API,这不是更好吗?
关于javascript - 动态行为添加是使用装饰器模式的唯一优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42359872/