"责任链"和"战略"模式之间有什么区别?

Osc*_*ros 12 design-patterns strategy-pattern chain-of-responsibility

我提出这个问题是因为几天前我在这里提出的另一个问题.
我必须解决一个特定的问题,在得到两个回复后,我意识到两个模式可以帮助解决这个问题(以及任何其他类似问题).

  1. 责任链
  2. 战略

我的问题是:

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

Kon*_*rus 27

他们非常不同.

策略是关于具有通用接口,可用于提供算法的不同实现,或具有一些共同依赖性的若干算法或逻辑片段.

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

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

这种模式是现在无所不在的控制反转的基础.研究下一次完成经典模式后.

责任链是关于拥有一系列对象,这些对象通常从更详细到更通用.链中的每个部分都可以提供答案,但它们具有不同的细节层次.

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

看起来你没有,但应该阅读GOF"设计模式"的经典之作.


Dav*_*son 10

在责任链中,如果对象无法处理它,则每个对象都有责任将调用发送到链中的下一个对象。

在 Strategy 中,所有对象都具有相同的接口,但必须由一些外部力量提供使用哪个接口。