【设计模式】(二)之设计原则

设计模式的设计原则如下

  • 单一职责原则(Single Responsiblility Principle),简称SRP
  • 里氏替换原则(Liskov Substitution Principle),简称LSP
  • 依赖倒置原则(Dependence Inversion Principle),简称DIP
  • 接口隔离原则(Interface Segregation Principle),简称ISP
  • 迪米特法则(Law of Demeter Principle),简称LoD
  • 开闭原则(Open-Closed Principle),简称OCP

单一职责原则SRP

英文原话
Software entities should be open for extension, but closed for modification.

单一职责原则,一个类应该只有一个职责,不能有其他引起它变化的原因。

SRP有以下几个优点

  • 降低类的复杂性
  • 提高类的可读性
  • 提高代码的可维护性和复用性
  • 降低因变更引起的风险

里氏替换原则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 S,The behavior of P is unchanged when o1 is substituted for o2 then T is a subtype of S.

这是比较贴切的定义,即如果对一个类型为S的对象o1,都有类型T的对象o2,使得以S定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T是类型S的子类型。

第二种定义
Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

所有引用基类的地方必须能够透明地使用其子类对象。

在设计模式中体现里氏替换原则的有以下几种模式:

  • 策略模式
  • 组合模式
  • 代理模式

依赖倒置原则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. 抽象不依赖细节
  3. 细节应该依赖抽象

在java的表现为,模块间的通过抽象依赖,实现类之间不直接依赖,其依赖关系都是通过接口或者抽象类产生。
更可以理解是面向接口编程的一种原则。

接口隔离原则ISP

第一种定义
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.

直白一点就是,一个模块或者一个类对一个个模块或者类直接按的依赖应该最小原则,不要建立一些不需要的依赖。不得不说,在接口交互设计上大家都会接触到很多接口返回一堆不需要的依赖,日积月累以后,各种不需要的依赖到底清理也不是,不清理也不是。

迪米特法则LoD

迪米特法则又叫最少知识原则,意思就是一个对象应当对其他对象尽可能的少了解。
对迪米特法则进行应用的设计模式有以下两种:

  • 外观模式
  • 中介者模式

这在工作中很好的体现,如果你什么事情都要去关联上,即使你仅仅是关联,到时候需要修改了,发现谁有一点变动你都要调整。细节了解太多,修改的会更多。所以在工作中,接口设计尽量的透明。让别人能少的减少依赖。让数据流转尽可能的精简。

开闭原则OCP

英文原话
Software entities should be open for extension, but closed for modification.

意思是,一个软件实体应当对拓展开放,对其修改关闭。
开闭原则是最基础的原则,其他原则都是开闭原则的具体形态。

原创文章 29 获赞 41 访问量 957

猜你喜欢

转载自blog.csdn.net/lovesunren/article/details/105624352