如何将装饰器模式添加到责任链中?
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
。因为在现实中,如果当前不合适,您不需要知道下一个如何计算结果。在这种情况下,请在界面级别插入装饰器。然后你可以在运行时选择,如果你想在链的前面插入一个全局装饰器,或者你是否想为一些处理程序插入一些装饰器。
我创建了以下 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
。因为在现实中,如果当前不合适,您不需要知道下一个如何计算结果。在这种情况下,请在界面级别插入装饰器。然后你可以在运行时选择,如果你想在链的前面插入一个全局装饰器,或者你是否想为一些处理程序插入一些装饰器。