面向对象设计的原则
面向对象设计有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