如何将装饰器模式添加到责任链中?

How can I add a decorator pattern to a chain of responsibility?

我创建了以下 UML。它基本上是一个货币转换器。现在,它是一个责任链。但是现在我想添加一个 Decorator 模式。因此,例如,添加固定处理量。如何在此处插入装饰器模式? 感谢您的帮助!

chain of responsibility aims to give to more than one object (instances of WR specializations) the possibility to handle a request, here the umrechnen() operation. A decorator 是为了增加额外的责任,例如计算一些固定的交易费用。

可以考虑多种解决方案,具体取决于您的意图:

  • 向整个链添加责任:装饰器 implements/realizes IUmrechner 接口并引用 IUmrechner 元素(另一个装饰器,或链的第一个处理程序。
  • 向处理程序添加责任:装饰器 extends/specializes WR 并引用 WR。这看起来非常灵活,但会使链难以填充。此外,这适用于链条,前提是可以将添加的责任连接到 umrechnen() 请求中:否则链条无法利用此责任。

第三种值得探索的方法是混合方法:

  • 更改您的 WR,使下一个 IUmechnen 而不是 WR。因为在现实中,如果当前不合适,您不需要知道下一个如何计算结果。在这种情况下,请在界面级别插入装饰器。然后你可以在运行时选择,如果你想在链的前面插入一个全局装饰器,或者你是否想为一些处理程序插入一些装饰器。