最早总结的设计模式只有 5 个, 即SOLID
:
单一职责原则 (Single Responsibility Principle, SRP)
:一个类应该只有一个引起变化的原因,即一个类应该只有一个责任。开闭原则 (Open/Closed Principle, OCP)
:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭,即应该通过扩展来实现变化,而不是通过修改已有的代码。里氏替换原则 (Liskov Substitution Principle, LSP)
:子类型必须能够替换其基类型,即派生类必须能够替换其基类而不影响程序的正确性。接口隔离原则 (Interface Segregation Principle, ISP)
:不应该强迫客户端依赖于它们不使用的接口。应该将大接口拆分成更小的、更具体的接口,以便客户端只需知道它们需要使用的方法。依赖倒置原则 (Dependency Inversion Principle, DIP)
:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于具体实现细节,具体实现细节应该依赖于抽象。后来增加了两个规则, 这些后加的规则相较来说更具体, 更有指导性. 我们从原则解释中可以看到SOLID
描述应该怎么做
, 后加的规则描述优先/最好怎么做
.
合成/聚合复用原则 (Composition/Aggregation Reuse Principle, CARP)
:应该优先使用对象组合(合成)和聚合,而不是继承来达到代码复用的目的。迪米特法则 (Law of Demeter, LoD)
:一个对象应该对其他对象有尽可能少的了解,即一个对象应该对其它对象的内部结构和实现细节知道得越少越好。除了上述提到的常见设计原则外,还有一些其他的设计原则,虽然不如前面提到的那些广为人知,但同样对软件设计和架构有重要的指导作用。 后续提出的这些规则, 有点画蛇添足, 至少我认为它们不反直觉, 不需要深入思考.
最少知识原则 (Principle of Least Knowledge, PoLK)
:也被称为迪米特法则的扩展,主张一个对象应该尽可能少地了解其他对象的信息。这个原则的产生可以追溯到 1987 年由帕特里夏·莱塞尔( Patricia Lago )和科威特·伯克( Koos Visser )提出的“最少通信法则”。稳定依赖原则 (Stable Dependencies Principle, SDP)
:该原则认为软件设计应该确保稳定的组件不依赖于不稳定的组件,即稳定性较高的组件应该更少地依赖于稳定性较低的组件。这个原则的思想来源于对软件系统中组件之间关系的深入研究。稳定抽象原则 (Stable Abstraction Principle, SAP)
:与稳定依赖原则相呼应,该原则指导着将抽象性与稳定性相匹配,即稳定的组件应该是抽象的,而不稳定的组件应该是具体的。这个原则有助于确保软件系统的稳定性和灵活性。这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.