原文:
http://blog.csdn.net/eric_jo/article/details/6799067
A. High level modules should not depend upon low level modules. Both shoulddepend upon abstractions.
高层模块不应该依赖于低层模块,二者都应该依赖于抽象
B. Abstractions should not depend upon details. Details should depend uponabstractions.
抽象不应该依赖于细节,细节应该依赖于抽象
概念解说:
依赖:在程序设计中,如果一个模块a使用/调用了另一个模块b,我们称模块a依赖模块b。
低层模块:往往在一个应用程序中,我们有一些低层次的类,这些类实现了一些
基本的或初级的操作,我们称之为低层模块;
高层模块:另外有一些高层次的类,这些类封装了某些复杂的逻辑,并且依赖于
低层次的类,这些类我们称之为高层模块。
我们现在来看看依赖有几种,依赖也就是耦合,分为下面三种:
----- 零耦合(Nil Coupling)关系,两个类没有依赖关系,那就是零耦合。
----- 具体耦合(Concrete Coupling)关系,两个具体的类之间有依赖关系,
那么就是具体耦合关系,如果一个具体类直接引用另外一个具体类就会发
生这种关系。
-----抽象耦合(Abstract Coupling)关系,这种关系发生在一个具体类和一个抽
象类之间,这样就使必须发生关系的类之间保持最大的灵活性。
为什么叫做依赖倒置(DependencyInversion)呢?
面向对象程序设计相对于面向过程(结构化)程序设计而言,依赖关系被倒置了。因为传统的结构化程序设计中,高层模块总是依赖于低层模块。
依赖倒置(Dependence InversionPrinciple)原则讲的是:要依赖于抽象,不要依赖于具体。
简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述:
抽象不应当依赖于细节;细节应当依赖于抽象;
要针对接口编程,不针对实现编程。