5

我已经阅读了策略模式和开放封闭原则在我看来都是一样的。如果它们相同,为什么我们有不同的名称模式 \principle 。

请分享您对此的看法。

4

4 回答 4

6

OCP 比 Strategy 在更一般的层面上出现 - 这就是为什么它是一个原则而不是一个模式。OCP 并没有说明应该有一个 X 类来执行 Y 和 Z 并以 W 方式与另一个类协作。它只声明类应该对修改关闭,但对扩展开放

您可以通过将类的一些职责外化到 Strategy 并编写新的 Strategies 来实现类中的 OCP,而不是修改类本身,但这并不是尊重 OCP 的唯一方法。还有其他模式可以帮助实现 OCP,例如抽象工厂。

于 2012-10-25T13:41:34.827 回答
1

策略模式与在运行时选择不同的算法有关。它没有说明在维护期间是否应该或如何修改一个类。

开放/封闭原则与在维护期间允许扩展有关,但与修改无关。它没有说明在运行时实现或选择不同的算法。

如果这两个在您看来仍然相同,我建议您编写一些包含每种模式的代码。这应该使差异一目了然。

于 2012-10-25T10:31:45.557 回答
1

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

于 2019-07-19T07:57:38.427 回答
0

我认为,设计模式 - 就像治愈某种疾病。和疾病 - 是违反SOLID

还有一件事 - 所有设计模式符合 SOLID 原则和其他原则: 优先组合而不是继承 封装更改 做高内聚和低耦合等

这里有一些来自http://www.remondo.net/solid-principles-csharp-open-closed/的例子:

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

于 2012-12-06T07:29:12.373 回答