javascript - 动态行为添加是使用装饰器模式的唯一优势吗?

标签 javascript java ios design-patterns

我目前正在研究 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/

相关文章:

ios - 将项目从 ObjC 移植到 Swift 后应用程序无法启动

ios - 通过数据模型设置objectAtIndex的正确类型

ios - UITableView 中的多个自定义单元格与 Firebase 数据库

javascript - Oracle Apex 5.0 : Can you use the action menu buttons on an Interactive report when the action bar is set to not show?

javascript - 在 jQuery 中动画元素时需要一个事件

javascript - 使用javascript的iframe问题

java - 在 PPTX 中绘制圆弧

JavaFX 2.2.21 - 仅在 VBOX 或 HBOX 内部移动对象

javascript - 当使用 Vuejs 更改对象中的任何数据时,如何运行函数?

java - Log4j 堆栈溢出错误