开闭原则与策略模式

5
我已经阅读了策略模式和开闭原则,它们看起来非常相似。如果它们是相同的,为什么我们有不同的名称模式/原则呢?
请分享你对此的想法。
4个回答

7
OCP的范围比策略模式更普遍——这就是为什么它是一个原则而不是一个模式。OCP并不表示应该有一个类X来执行Y和Z,并以一种W方式与另一个类协作。它只是说类应该对修改关闭,对扩展开放
通过将一些责任外部化到策略中,并编写新的策略而不是修改类本身,就可以在类中实现OCP,但这不是遵循OCP的唯一方法。还有其他模式可以帮助实现OCP,例如抽象工厂。

1

开闭原则是一种策略模式实现的好方法。


1
策略模式与在运行时选择不同算法有关。它并没有说明类在维护期间应该如何修改或是否需要修改。
开闭原则是允许在维护期间进行扩展,但不允许进行修改。它并没有说明实现或在运行时选择不同算法的问题。
如果这两个模式看起来仍然相同,请尝试编写一些包含每个模式的代码。这样可以使差异变得清晰明了。

0

我认为,设计模式就像是对抗某些疾病的治疗方法。而疾病则是违反了S.O.L.I.D原则。

还有一件事情——所有的设计模式都符合S.O.L.I.D原则和其他原则:

  • 优先使用组合而非继承
  • 封装变化
  • 高内聚低耦合等等

以下是http://www.remondo.net/solid-principles-csharp-open-closed/中的一个例子:

......这违反了开放/封闭原则......应用策略模式是建立这种方式的一种方法......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接