引用自:http://blog.csdn.net/lovelion 作者:刘伟
依赖倒转原则(Dependency Inversion Principle, DIP):上层模块不应该依赖底层模块,它们都应该依赖于抽象.抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情.
在实现依赖倒转原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入(DependencyInjection, DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。
什么是依赖?
依赖就是二者之间的一种关系,比如程序员写代码需要电脑,如果没有电脑就没法编写代码.
那就可以说程序员依赖于电脑,相应的电脑被程序员所依赖.
什么是上层模块,什么是底层模块?
通过职能的重要性来划分,在软件开发中,分为业务层,逻辑层,数据层
业务层:需要做什么样的操作
逻辑层:根据业务层的需求提供具体实现的细节
数据层:业务层与逻辑层之间的数据模型
那业务层就属于上层模块,逻辑层与数据层就属于底层模块
什么是抽象?什么是细节?
抽象是相对于具体的物体而言,具体的物体又可以看作是细节
比如表演,可以是跳舞,可以是唱歌,那表演就是抽象,跳舞跟唱歌就是具体的细节
在面向对象里,抽象表现形式就是抽象类或者接口
那依赖倒置原则就可以这样理解:
原先依赖关系:上层模块依赖与底层模块
依赖倒置后: 上层模块依赖与抽象,底层模块也依赖与抽象,上层与下层失去了依赖关系