我正在研究装饰设计模式,这种想法让我很烦恼。
只有一个基类具有与其特征对应的布尔值会更容易吗?
例如: 如果textview基类具有用于canVerScroll,canHorScroll,hasBorder的BOOL,则textview可以具有垂直滚动,水平滚动,边框等。为什么这不比Decorator设计模式好?
感谢您的帮助!
答案 0 :(得分:1)
只有一个基类具有与其特征对应的布尔值会更容易吗?
这会违反名为 Open-Closed 原则的 SOLID 原则。 Open-Closed 原则规定组件应该对扩展开放但不能修改。如果您有一个TextView
类,则每次要在文本视图中引入新行为时都需要更改它。
为什么这不比Decorator设计模式好?
想象一下,您的API用户(无权访问您的API源代码)想要为名为旋转360度的TextView
类引入新行为。他们在这里有两个选项,要么等待您向BOOL
基类添加新的TextView
并支持此功能,要么想办法在TextView
之上添加此功能。他们可以选择的一个选项是创建TextViewAdapter
(读取Adapter pattern),这将允许他们在您提供的功能之上添加所需的功能。
如果您提供了扩展API的能力,而不是在没有干预的情况下创建不可扩展的API,那会不会更好?