设计模式之六大设计原则 - morris131/morris-book GitHub Wiki


title: 设计模式之六大设计原则 date: 2018-09-18 17:36:22 categories: 设计模式 tags: [设计模式,设计原则]

设计模式之六大设计原则

单一职责原则

单一职责原则(Single Responsibility Principle,SRP):应该有且仅有一个原因引起类的变更,即一个类只负责一项职责。

接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。

里氏替换原则

里氏替换原则(Liskov Substitution Principle,LSP)有两种定义:

  • 第一种定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变 化,那么类型S是类型T的子类型。
  • 第二种定义:所有引用基类的地方必须能透明地使用其子类的对象。

只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。

里氏替换原则包含四层含义:

  1. 子类必须完全实现父类的方法
  2. 子类可以有自己的个性
  3. 覆盖或实现父类的方法时输入参数可以被放大
  4. 覆写或实现父类的方法时输出结果可以被缩小

依赖倒置原则

依赖倒置原则(Dependence Inversion Principle,DIP):高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

精简的定义就是面向接口编程,包含三层含义:

  1. 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
  2. 接口或抽象类不依赖于实现类;
  3. 实现类依赖接口或抽象类。

接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP):客户端不应该依赖它不需要的接口。类间的依赖关系应该建立在最小的接口上。

接口尽量细化,同时接口中的方法尽量少。接口隔离原则与单一职责的审视角度是不相同的,单一职责要求的是类和接口职责单一,注重的是职责,这是业务逻辑上的划分,而接口隔离原则要求接口的方法尽量少。

迪米特法则

迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有最少的了解。

使用总结:

  • 在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;
  • 在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;
  • 在类的设计上,只要有可能,一个类型应当设计成不变类;
  • 在对其他类的引用上,一个对象对其他对象的引用应当降到最低。

开闭原则

开闭原则(Open Close Principle,OCP):一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。

⚠️ **GitHub.com Fallback** ⚠️