面向对象设计的原则

面向对象设计有5大原则(SOLID):

  • 单一职责原则(S):一个对象只负责单一的功能,不和其他对象的功能牵扯到一块
  • 开闭原则(O):对扩展开放,对修改关闭
  • 里氏替换原则(L):子类能够替代其超类被使用,即针对接口编程,而不是针对实现编程
  • 接口隔离原则(I):多个分门别类的接口好于一个大而全的接口
  • 依赖倒置原则(D):下文详细解释

依赖倒置原则

定义:依赖倒置是指一种特定的解耦形式,使得高层次模块不依赖于低层次模块的具体实现细节,依赖关系被反转,从而使低层次的模块依赖于高层次模块的抽象。
目的:是把高层次组件从对低层次组件的依赖中解耦出来,这样使得重用不同层级的组件实现变得可能

该原则规定:
- 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口
- 抽象接口不应该依赖于具体实现,而具体实现应该依赖于抽象接口

解释规定1:
面向对象设计的原则
图1中高层次对象A依赖于低层次对象B的实现,图2中在高层次中将对低层对象的需求抽象成了一个接口A,对象A和对象B都依赖于抽象接口A,对象A引用接口A,不关心低层次对象的具体实现细节,对象B实现接口A,这样高层次模块和低层次模块就通过接口解耦了,任何实现抽象接口的对象都可以被灵活替换,达到高层次组件的需求和低层次的具体实现解耦。

解释规定2:
理解规定1后这个比较好理解,抽象接口如果依赖于具体实现,就可以按照规定1解耦,所以抽象接口不能依赖于具体实现;而具体实现依赖于抽象接口就可做到规定1的解耦。


依赖相关解释
What is a Dependency?
Whenever a class A uses another class or interface B, then A depends on B. A cannot carry out it’s work without B, and A cannot be reused without also reusing B. In such a situation the class A is called the “dependant” and the class or interface B is called the “dependency”. A dependant depends on its dependencies.

Dependency Types
A dependency isn’t just a dependency. There are several types of dependencies. Each type leads to more or less flexibility in the code. The dependency types are:

  • Class Dependencies
  • Interface Dependencies
  • Method / Field Dependencies