1.单一职责原则
定义:应该有且只有一个原因引起类的变化。There should never be more than one reason for a class to change.
2.里是替换原则
定义:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换为o2,程序P的行为没有发生变化,那么类型S是类型T的子类型。4层含义:
- 子类必须完全实现父类的方法。
- 子类可以有自己的个性。
- 覆盖或实现父类的方法时输入参数可以被放大
父类 public Collection doSomething(HashMap map){.....}
子类 public Collection doSomething(Map map){.....} 如果,反过来父类存在的地方,子类未必存在。
- 覆盖或实现父类的方法是输出结果可以缩小
3.依赖倒置原则
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 abstracts.
翻译过来为:
- 高层模块不应该依赖低层模块,两者都应该依赖抽象
- 抽象不应该依赖细节
- 细节应该依赖抽象
也可以说高层模块,低层模块,细节都应该依赖抽象
对象的依赖关系有三种方式的传递:
1.构造方法传递依赖对象
2.Setter方法传递依赖对象
3.接口声明依赖对象
最佳实践
- 每个类尽量都有接口或者抽象类,或都应具备
- 变量的表面类型尽量是接口或抽象类
- 任何类都不应该从具体类派生
- 尽量不要覆写基类方法
- 结合里是替换原则
4.接口隔离原则
定义:客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。通俗讲:接口尽量细化,同时接口方法尽量少。单一职责要求的是类和接口职责单一,注重的是职责,是从业务逻辑划分,而接口隔离要求接口的方法尽量少。