design-patterns - "Chain of responsibility"和 "Strategy"模式有什么区别?

标签 design-patterns strategy-pattern chain-of-responsibility

我提出这个问题是因为 another question几天前我在这里问过。
我必须解决一个特定问题,在收到两次回复后,我意识到两种模式可以帮助解决该问题(以及任何其他类似问题)。

  • 责任链
  • 战略

  • 我的问题是:

    这些模式之间究竟有什么区别?

    最佳答案

    他们非常不同。

    战略 是关于拥有一个通用接口(interface),您可以使用它来提供算法的不同实现,或者具有一些共同依赖关系的几种算法或逻辑片段。

    例如,您的 CollectionSorter可以支持 SortingStrategy (合并排序、快速排序、冒泡排序)。它们都有相同的界面和目的,但可以做不同的事情。

    在某些情况下,您可能会决定在内部确定策略。也许分拣机有一些基于集合大小等的启发式方法。大多数时候它确实是从外部注入(inject)的。这是该模式真正闪耀的时候:它为用户提供了覆盖(或提供)行为的能力。

    这种模式是现在无处不在的 的基础。控制反转 .一旦你完成了经典模式,接下来研究一下。

    责任链是关于拥有一个通常从更详细到更通用的对象链。链中的每个部分都可以提供答案,但它们具有不同的详细程度。

    流行的 GOF 示例是上下文帮助系统。当您单击桌面应用程序中的组件时,会显示哪些帮助?链中的第一项可以为您单击的组件寻求帮助。 Next in chain 可以尝试显示整个包含对话框的帮助。接下来是应用程序模块......等等。

    看起来您还没有,但应该阅读 GOF“设计模式”经典。

    关于design-patterns - "Chain of responsibility"和 "Strategy"模式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039024/

    相关文章:

    java - 策略模式中的通用方法重写

    asp.net - 遍历策略设计模式

    python - 使用协程在 python 中实现责任链模式

    c# - 设计模式 : Many Methods Share The Same First Step

    java - 如何在 Java 中实现具有内部依赖性的惰性评估有状态类?

    c# - 将数据访问层移动到 WCF 服务

    c# - 工厂模式应该放在 DDD 中的什么位置?

    java - 抽象工厂模式依赖于对象组合?

    Angular:查找所有实现特定接口(interface)的提供者

    design-patterns - 多个处理程序中只有一个处理程序应根据特化进行操作的模式