设计模式6大原则

看了很久的设计模式,23种都是初步了解但是距实际熟练运用还是有距离,毕竟这方面的经验来自于实战。但是不论设计模式如何千变万化,它们的原则都是不变的,万变不离其宗。在此记录下这些原则,也是OOP编程需要掌握的一些原则。

单一职责原则

Single Responsibility Principle, 简称SRP原则。

There should never be more than one reason for a class to change
有且仅有一个原因引起类的变更。

对于接口,我们在设计的时候一定要做到功能单一,但是对于实现类就需要做更多的考虑了。单一职责原则同时也适用于方法。

里氏替换原则

Liskov Substitution Principle,简称LSP原则。

If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.
(如果对每一个类型为s的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有发生变化,那么类型S是类型T的子类型)

依赖倒置原则

Dependence Inversion Principle, 简称DIP原则。

High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.

  • 高层模块不应该依赖低层模块,两者都 应该依赖其抽象。
  • 抽象不应该依赖细节。
  • 细节应该依赖抽象。

抽象:接口或抽象类,不能被实例化的
细节:实现类,能被实例化

依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险。

依赖有三种写法:

  1. 构造函数传递依赖对象
  2. setter方法传递依赖对象
  3. 接口声明依赖对象(接口注入)

接口隔离原则

Clients should not be forced to depend upon interfaces that they don’t use
The dependency of one class to another one should depend on the smallest possible interface

  1. 接口要尽量小
  2. 接口要高内聚
  3. 定制服务
  4. 接口设计是有限度的

迪米特法则

Law of Demeter, 简称LoD原则。

Only talk to your immediate friends

开闭原则

Software entities like classes,modules and functions should be open for extension but closed for modifications
(一个软件实体类,应该对扩展开放,对修改关闭)