我正在做一个关于SOLID设计原则的演示,并尝试将单一职责原则和开闭原则与设计模式联系起来。
目前我有:
- SRP:代理,外观
- OCP:策略,命令
还有哪些基本的模式我应该包括在内?
我正在做一个关于SOLID设计原则的演示,并尝试将单一职责原则和开闭原则与设计模式联系起来。
目前我有:
还有哪些基本的模式我应该包括在内?
SOLID原则是一个好的面向对象语言和框架所具备的属性,它们并不方便地转化为设计模式。相反,它们影响了设计模式中好与坏的区别。
通常情况下,所有SOLID原则都会在每个设计模式中出现。如果所有的SOLID原则没有出现,你需要改进设计模式。
单一职责原则实际上是封装以及继承和多态的某些方面。单一职责原则更像是如何将问题分解成协作对象并定义这些对象的类的基本原则或准则。所有的设计模式都应该说明这一点。
同样地,开闭原则是一种语言特性,通常通过继承实现。但也可以通过monkeypatching来实现。所有的设计模式都应该说明这一点。
里氏替换原则也通常是一种语言特性。我们经常使用良好设计的多态类来实现它。一些人认为鸭子类型打破了这个原则,另一些人则认为鸭子类型体现了它。有很多设计模式依赖于里氏替换原则。任何具有多态性的东西都会表现出里氏替换原则。
接口隔离原则可以是一种语言特性。Java有它。据大多数人说,Python没有这个特性。不过,你会注意到很多Python项目试图用超类和单元测试来形式化它们的接口定义。
依赖倒置原则(依赖于抽象)通常是一种语言特性。没有多少设计模式坚持这一点。然而,我们中的许多人喜欢使用Java集合库中的抽象,以便我们可以在具体类之间使用里氏替换。
我做了同样的演示,并挑选了一些设计模式来展示它们如何应用原则。
我注意到对于LSP,GOF中除了两个设计模式外,其余都使用了替换。