七大设计原则

一、开闭原则(Open Closed Principle,OCP)

定义

  一个软件实体如类、模块和函数应该对扩展开放对修改关闭

  模块应尽量在不修改原来代码的情况下进行扩展

  用抽象构建框架,用实现扩展细节

优点:提高系统的可复用性和可维护性

做法:

  1.通过接口或者抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法,也就是扩展必须添加具体实现而不是改变具体的方法

  2.参数类型、引用对象尽量使用接口或者抽象类,而不是实现类,这样就能尽量保证抽象层是稳定的

  3.一般抽象模块设计完成(例如接口的方法已经敲定),不允许修改接口或者抽象方法的定义

代表:装饰器模式

 

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

定义

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

  抽象不应该依赖细节,细节应该依赖抽象

  针对接口编程,不要针对实现编程

优点:减少类间的耦合性,提高系统稳定性,降低修改程序造成的风险,提高可读性和可维护性

做法:

  1.每个具体的类都应该有其接口或者基类,或者两者都具备

  2.类中的引用对象应该是接口或者基类

 

三、单一职责原则(Single Responsibility Principle, SRP)

定义

  指一个类或者模块应该有且只有一个引起改变的原因

  一个类、接口、方法只负责一项职责

优点:降低类的复杂度,提高可读性和可维护性,降低变更引起的风险,使类的颗粒度更小

代表:迭代器模式

 

四、接口隔离原则(Interface Segregation Principle,ISP)

定义

  用多个专门的接口,而不是使用一个总接口

  客户端不应该依赖它不需要的接口

优点:降低类的复杂度,提高可读性和可维护性,降低变更引起的风险,使类的颗粒度更小

做法

  尽量细化接口,减少接口中的方法

  一个类对另一个类的依赖应该建立在最小的接口上

  使用接口隔离原则前,先满足单一职责原则

  要注意适度

 

五、迪米特法则(Law of Demeter,LOD)

定义

  也叫最小知道原则(Least Knowledge Principle,LKP)

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

  强调尽量只与直接的朋友通讯,一个对象的"朋友"包括他本身(this)、它持有的成员对象、入参对象、它所创建的对象

优点:降低类间的耦合

做法尽量减少对象之间的交互

 

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

定义

  所有引用基类的地方必须能透明地使用其子类的对象,也可以简单理解为任何基类可以出现的地方,子类一定可以出现

  子类可以扩展父类的功能,但不能改变父类原有的功能

优点:防止继承泛滥,提高代码的健壮性、兼容性、扩展性,降低变更的风险

做法

  子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法

  子类可以扩展增加自己独有的方法

  子类覆盖父类的方法时,入参应该相等或更宽松,确保父类能接收的参数,子类都能接收,而出参应该相等或更严谨

 

七、合成复用原则(Composite/Aggregate Reuse Principle,CARP)

定义

  尽量使用对象组合/聚合,而不是通过继承达到复用的目的

  聚合: has-a,两者生命周期相互独立

  组合: contains-a,两者生命周期相同

优点:降低类与类之间的耦合,更加灵活

 

 

参考:https://www.jianshu.com/p/3a0e9fba3a41

 
posted @ 2021-08-11 23:11  silence丶秋枫  阅读(631)  评论(0编辑  收藏  举报