我正在阅读 Chain of Responsibility模式,我很难想象一个场景,当我更喜欢使用它而不是 decorator 时.
你觉得怎么样? CoR 有特殊用途吗?
最佳答案
您可以在任何时候打破链条,这一事实将责任链模式与装饰者模式区分开来。装饰器可以被认为是一次性执行,无需与其他装饰器进行任何交互。链中的链接可以被认为是一次执行一个链接,因为它们每个都依赖于前一个链接。
当您可以将程序概念化为由链接组成的链时,请使用责任链模式,其中每个链接都可以处理请求或将其传递到链上。
当我使用 Win32 API 时,有时需要使用它提供的 Hook 功能。 Hook Windows 消息大致遵循责任链模式。当您 Hook 诸如 WM_MOUSEMOVE 之类的消息时,您的回调函数将被调用。将回调函数视为链中的最后一个环节。链中的每个链接都可以决定是丢弃 WM_MOUSEMOVE 消息还是将其沿链向上传递到下一个链接。
如果在该示例中使用了装饰器模式,您将收到 WM_MOUSEMOVE 消息的通知,但您将无法阻止其他钩子(Hook)也处理它。
使用命令链模式的另一个地方是游戏引擎。同样,您可以 Hook 引擎函数、事件和其他内容。对于游戏引擎,您不想简单地添加功能。您想要添加功能并阻止游戏引擎执行其默认操作。
关于oop - 为什么我要使用责任链而不是装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/747913/