开闭原则 vs 策略模式

问题描述 投票:0回答:4

我已经阅读了策略模式和开闭原则。两者对我来说看起来都一样。如果它们相同,为什么我们对它们有不同的模式/原理名称。

请分享您对此的看法。

design-patterns solid-principles
4个回答
9
投票

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-filled/:

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

© www.soinside.com 2019 - 2024. All rights reserved.