六个设计原则

六个设计原则

一、单一职责原则

​ (Single Responsibility Principle)

There should never be more than one reason for a class to change.

​ 意思说:一个类,应当只有一个引起它变化的原因;即一个类应该只有一个职责。类的职责越少,则对象之间的依赖关系就越少,耦合度就越低。

​ 单一职责模式例子如下:

这里写图片描述

二、里氏替换原则

(Liskov Substitution Principle)

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

意思是说:所有引用父类的地方必须能透明地地使用其子类对象。更明确地说只要父类出现的地方子类就可以出现,而且替换为子类不会发生任何异常。

只有当子类可以替换掉父类,软件的功能不受到影响时,父类才能真正被复用。

里氏替换原则为良好的继承定义了一个规范 ,包含4层含义:

  • 子类必须完全实现父类的方法
  • 子类可以有自己导弹个性
  • 覆盖或实现父类的方法时输入参数可以被放大
  • 覆盖和实现父类的方法时输出结果可以被缩小

注:按照里氏替换规则,除非要使用子类的个性方法,通常应该使用父类或接口来指向子类的对象。

三、依赖倒置原则

(Dependence Inversion Principle)

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

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

  • 抽象不依赖细节

  • 细节应该依赖抽象

    在Java中的体现:“面向接口编程”。

一个例子如下:

这里写图片描述

注意:在Java中,一个变量可以有两种类型,表面类型和实际类型。

实际开发中要遵守以下原则:

  • 每个类都要有抽象类或接口,有抽象才有依赖倒置
  • 变量的表面类型尽量是接口类型或抽象类型
  • 任何类都不应该从具体类导出
  • 尽量不要重写父类的方法。重写了非抽象方法对依赖的稳定性产生一定影响。
  • 结合里氏替换可以可到一个通俗规则:接口负责定义抽象方法,并且声明与其他对象的依赖关系(方法参数和返回值类型),抽象类负责公共构造部分的实现,实现类对父类进行细化。
依赖倒置可以说是面向对象的标志,如果编写时考虑的都是针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都终止于抽象类或接口,那就是面向对象设计。

四、接口隔离原则

(Interface Segregation Principle)

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

接口隔离原则的应用:

这里写图片描述

五、迪米特法则

​ (Law of Demeter)or (Least KnowLedge Principle最少知识原则)

  • only talk to your immediate friends.
  • Don’t talk to strangers.

反例:

自己 ---> 朋友  -->   陌生人
  |                  ^
  |-------------------|
talk to the stranger!!

正例:

这里写图片描述

六、开闭原则

​ (Open-Closed Principle) 简称OCP

Software entities should be open for extension , but closed for modification.

面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。开发人员应该尽早地对频繁变化的部分创建正确的抽象

例子:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_37540865/article/details/80498427