单一职责原则
官方定义:
- 单一职责原则(Single Responsibility Principle, SRP),有且仅有一个原因引起类的变更
自我理解:
一个类只负责一想职责
注意事项&细节
-
降低类的复杂度,一个类只负责一项职责
-
提高类的可读性以及可维护性
-
降低变更引起的风险
-
通常情况下,我们应当遵守类级别单一职责原则
接口隔离原则
官方定义:
接口隔离原则(Interface Segregation Principle),又称为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. (类间的依赖关系应该建立在最小的接口上)
自我理解:
不要在一个接口里面定义过多的方法,接口应该尽量细化
注意事项&细节
接口隔离原则就是当我一个类通过接口依赖(使用)另一个类的时候,要保证依赖的该接口是最小的, 接口里面有方法用不到的,就进行隔离,而隔离的做法就是,就对原来接口进行拆分,拆分为最小粒度,来避免耦合
依赖倒转原则
官方定义:
依赖倒转原则,又称依赖倒置原则(Dependence Inversion Principle),又称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. (抽象不应该依赖于细节,细节应该依赖于抽象)
自我理解:
面向接口编程
依赖倒转原则本质上 就是通过抽象(抽象类和接口)使得各个类或者模块实现彼此独立,互相不影响,实现模块间松耦合,要先顶层再细节的方式来进行代码设计
依赖关系传递方式
-
通过接口传递
-
通过构造方法传递
-
通过set()方法传递
注意事项&细节
-
低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
-
变量的声明类型尽量是抽象类或者接口,这样我们的变量引用和实际对象间,就存在一个缓冲层, 利于程序扩展和优化
-
继承时遵循里式替换原则
里氏替换原则
官方定义:
里氏替换原则(Liskov Substitution Principle,LSP)是1988年,麻省理工学院一位姓里的女士提出的
- 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 T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T. 如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象 o1都代换成o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型
- Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. 所有引用基类的地方必须能透明地使用其子类的对象
自我理解:
里氏替换原则通俗的来讲:子类可以扩展父类的功能,但是子类不能修改父类原有的功能
里氏替换原则就是给继承性的使用制定了规范
注意事项&细节
-
子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法
-
子类中可以扩展自己的方法
-
里氏替换原则并非让我们尽量避免使用继承
-
里氏替换原则是实现开闭原则的重要方式之一
开闭原则
官方定义:
开闭原则( Open Close Principle ),又称为OCP原则,他的官方定义如下:
- Software entities like classes,modules and functions should be open for extension but closed for modifications. 一个软件实体如类,模块和函数应该对扩展开放,对修改关闭
自我理解:
若需求变化了,是通过扩展来实现,而不是通过修改来实现
对扩展开放 -- 提供方
对修改关闭 -- 调用方
注意事项&细节
-
开闭原则 - 最基础最重要的设计原则
-
开闭原则可以提高复用性和可维护性
迪米特法则
官方定义:
迪米特法则(Law of Demeter, LoD)是1987年秋天由lan holland在美国东北大学一个叫做迪米特的项 目设计提 出的,它要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则(Least Knowledge Principle, LKP)
-
One object should have a minimum understanding of other objects (一个对象应该对其他对象有最少的了解 )
-
Only talk to your immediate friends ( 只与直接的朋友通信)
自我理解:
你女朋友不能饶过你跟你兄弟联系
注意事项&细节
- 迪米特法则的核心是降低类之间的耦合
- 从被依赖者的角度来说,尽量将逻辑封装在类的内部,对外除了提供的public方法,不泄露任何信息
- 从依赖者的角度来说,只依赖应该依赖的对象
- 切忌不要为了用而用
合成复用原则
官方定义:
合成复用原则(Composite Reuse Principle)的官方定义如下:
- Try to use composition / aggregation instead of inheritance( 尽量使用组合/聚合的方式,而不是使用继承 )
自我理解:
对象使用组合/聚合方式,依赖方式
注意事项&细节
- 尽量不使用集成方式
总结
-
开闭原则:要求对扩展开放,对修改关闭
-
里氏替换原则:不要破坏继承体系
-
依赖倒置原则:要求面向接口编程
-
单一职责原则:实现类职责要单一
-
接口隔离原则:在设计接口的时候要精简单一
-
迪米特法则:只与直接的朋友的通信
-
合成复用原则:尽量使用聚合和组合的方式,而不是使用继承