设计模式学习笔记(一) 6大设计原则

该篇主要讲的是面向对象六大原则,分别是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则和开闭原则。

1.单一职责原则(简称SRP)

单一职责原则的定义是:应该有且仅有一个原因引起类的变更。
好处:
  1. 类的复杂性降低,实现什么职责都有清晰明确的定义;
  2. 可读性提高,复杂性降低,显然可读性提高了;
  3. 可维护性提高,可读性提高,显然更容易维护了;
  4. 变更引起的风险降低,变更是必不可少,如果接口的单一职责做得好,一个接口修改只对响应的实现类有影响,对其他的接口无影响,对系统的扩展性、维护性都有非常大的帮助。

实现接口单一职责,是依据职责进行划分,一个职责一个接口,但是职责没有一个标准,但是要类实现单一职责,则需要多方面考虑。

例子:
A接口负责进行属性修改,B接口负责行为,C类可以实现A和B接口两个接口,如果A接口进行修改,则A的实现类修改即可,如果A和B接口合并,那么即使不需要A的方法的实现类,也需要增加方法。

注意:单一职责原则提出了一个编写程序的标准,用“职责”或“变更原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。

2.里氏替换原则(简称LSP)

只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。
规范:
  1. 子类必须完全实现父类的方法;
  2. 子类可以有自己的个性;
  3. 重载或实现父类的方法时输入参数可以被放大;
  4. 重写或实现父类的方法时输出结果可以被缩小;

3.依赖倒置原则(简称DIP)

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

4.接口隔离原则

建立单一接口,不要建立臃肿庞大的接口。根据模块提供接口,而不是将所有接口都放入一个接口中,但是首先必须满足单一职责原则。
含义:
  1. 接口要尽量小–首先必须满足单一职责原则;
  2. 接口要高内聚;
  3. 定制服务;
  4. 接口设计是由限度的;

5.迪米特法则(简称LoD)

一个对象应该对其他对象有最少的了解。
含义:
  1. 只和朋友交流;
  2. 朋友间也是有距离的;
  3. 是自己的就是自己的;
  4. 谨慎使用Serializable;

说明:朋友类是出现在成员变量、方法的输入输出参数中的类称为成员朋友类。迪米特法则要求类尽量不要对外公布太多的public方法和非静态的public变量,尽量内敛,多实用private、package-private、protected等访问权限。

6.开闭原则

一个软件实体应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化。软件实体应该对扩展开发,对修改关闭。

猜你喜欢

转载自blog.csdn.net/dulei17816/article/details/80527912