七大设计原则 学习笔记

单一职责原则

SRP:Single responsibility principle又称为单一功能原则:它规定一个类应该只负责一项职责。

单一职责原则注意事项和细节:
1)降低类的复杂度,一个类只负责一项职责。
2)提高类的可读性,可维护性。
3)降低变更引起的风险。
4)通常情况下,我们应当遵守单一职责原则,只有当逻辑足够简单时,才可以在代码级别违反单一职责原则;只有类中方法足够少,可以在方法级别保持单一职责原则。

接口隔离原则

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

实现接口的类中,有多余的方法时,需要将接口进行拆分。接口隔离原则的规范:
1)使用接口隔离原则前首先需要满足单一职责原则。
2)接口需要高内聚,也就是提高接口、类、模块的处理能力,少对外发布public的方法。
3)定制服务,就是单独为一个个体提供优良的服务,简单来说就是拆分接口,对特定接口进行定制。
4)接口设计是有限度的,接口的设计粒度越小,系统越灵活,但是值得注意不能过小,否则变成"字节码编程"。

依赖倒置原则(Dependency Inversion Principle,DIP)

程序要依赖于抽象接口,不要依赖于具体实现

即要求对抽象进行编程,不要对实现进行编程,这样有利于降低耦合

  1. 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好。
  2. 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲区层,对于程序扩展和优化。
  3. 继承时遵循理氏替换原则

​ 依赖传递的三种方式:

  • 接口传递
  • 构造方法传递
  • setter传递

里氏替换原则(Liskov Substitution Principle) LSP

​ 所有引用基类的地方必须能透明地使用其子类的对象,子类可以扩展父类的功能,但不能改变父类原有的功能。

  1. 里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合、组合、依赖来解决问题。
  2. 在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。

开闭原则(Open Closed Principle) OCP

​ 一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。模块应尽量在不修改原代码的情况下进行扩展

  1. 一个软件实体,如类,模块和函数应该对扩展开发放(提供方),对修改关闭(使用方)。用抽象构建框架,用实现扩展细节。
  2. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是修改已有的代码来实现变化。
  3. 编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则

迪米特法则(Law of Demeter)LOD

​ 也叫最少知识原则(Least Knowledge Principle)LKP

一个软件实体应尽可能少地与其他实体发生相互作用。迪米特法则的初衷在于降低类之间的耦合。

迪米特法则的规则:
1.Only talk to your immediate friends(只与直接的朋友通讯):每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系, 我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友(例如,在一个方法中new了一个类,那么此类就不属于直接朋友)。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。

2.一个对象应该对其他对象保持最少的了解。

3.类与类关系越密切,耦合度越大。

4.迪米特法则指一个类对自己依赖的类知道的 越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public 方法,不对外泄露任何信息。

5.迪米特法则还有个更简单的定义:只与直接的朋友通信。

合成复用原则

​ 尽量使用合成/聚合的方法,而不是使用继承。

  • ​ 聚合:“拥有”关系或者整体与部分的关系

  • ​ 合成:表示一种强得多的“拥有”关系

总结

【1】找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
【2】 针对接口编程,而不是针对实现编程。
【3】为了交互对象之间的松耦合设计而努力

s( Single-Resposibility Principle ): 单一职责原则

o( Open-Closed principle ): 开放封闭原则

l( Liskov-Substituion Principle ): 里氏原则

i( Interface-Segregation Principle ): 接口隔离原则

d( Dependecy-Inversion Principle ): 依赖倒置原则

一个单词:立方体(solid),很好记!!!

posted @ 2020-08-25 21:30  Ergoza  阅读(116)  评论(0)    收藏  举报