我什么时候应该使用装饰/观察者?

时间:2013-05-03 09:00:17

标签: design-patterns decorator observer-pattern

有这两种模式:观察者和装饰者。两者都使我能够在完成任务之后(或者在装饰者之前)添加动作。但他们的实施不同。所以我什么时候应该使用装饰者或观察者。

到目前为止,我提出了这个问题:

  • 装饰器:将业务功能添加到服务中,该服务将改变装饰服务所使用的实体的状态。

  • 观察者:更新视图模型/ gui,连接基础结构服务,更改其他实体的状态

例如在预订级别我有预订实体,第一项服务将创建预订并标记住宿不可用:

  • 向客户/所有者发送电子邮件:observer
  • 使用客户cc自动付款:decorator
  • 使用住宿可用性更新视图/缓存:observer
  • 将预订标记为“必须经过验证或验证”:decorator

我是对的吗?

2 个答案:

答案 0 :(得分:1)

这两种模式并不相似。如果在保持相同的界面时需要对对象的其他职责,则应使用Decorator。我不明白为什么在这种情况下你需要保持相同的界面,因此我反对Decorator。

当您希望收到另一个对象的更改通知时(例如“在完成某项操作后添加操作”),观察者很好,尽管可能有更简单的方法。

答案 1 :(得分:0)

观察者是行为模式。 装饰者是结构模式

使用 observer 实现事件处理(它将不同类的一些方法调用相互绑定)。 使用装饰器,您可以在运行时更改(扩展)某些对象的功能(它会更改对象本身 - 多亏了多态,因此可以覆盖相同的方法等)。

在您的示例预订应用程序中,我将使用这两种模式(如您所示)。