动态行为是否是使用Decorator模式的唯一优势?

时间:2017-02-21 06:07:24

标签: javascript java ios design-patterns

我正在研究装饰设计模式,这种想法让我很烦恼。

只有一个基类具有与其特征对应的布尔值会更容易吗?

例如: 如果textview基类具有用于canVerScroll,canHorScroll,hasBorder的BOOL,则textview可以具有垂直滚动,水平滚动,边框等。为什么这不比Decorator设计模式好?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  

只有一个基类具有与其特征对应的布尔值会更容易吗?

这会违反名为 Open-Closed 原则的 SOLID 原则。 Open-Closed 原则规定组件应该对扩展开放但不能修改。如果您有一个TextView类,则每次要在文本视图中引入新行为时都需要更改它。

  

为什么这不比Decorator设计模式好?

想象一下,您的API用户(无权访问您的API源代码)想要为名为旋转360度TextView类引入新行为。他们在这里有两个选项,要么等待您向BOOL基类添加新的TextView并支持此功能,要么想办法在TextView之上添加此功能。他们可以选择的一个选项是创建TextViewAdapter(读取Adapter pattern),这将允许他们在您提供的功能之上添加所需的功能。

如果您提供了扩展API的能力,而不是在没有干预的情况下创建不可扩展的API,那会不会更好?