1

有这两种模式:观察者和装饰者。两者都使我能够在完成某事之后(或装饰器之前)添加一个动作。但它们的实现方式不同。所以我什么时候应该使用装饰器或观察器。

到目前为止,我想出了这个:

  • decorator :向服务添加业务功能,这将改变被装饰服务使用的实体的状态。

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

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

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

我对吗 ?

4

2 回答 2

2

这两种模式并不相似。如果您需要在保持相同接口的同时对对象承担额外责任,则应该使用装饰器。我不明白为什么在这种情况下你需要保持相同的界面,因此我反对装饰器。

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

于 2013-05-03T10:06:29.433 回答
0

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

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

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

于 2013-05-03T09:58:45.860 回答