首页 > 程序开发 > 软件开发 > Java >

设计模式之禅-依赖倒置原则

2014-11-26

依赖倒置原则(DIP): demo(https: github com sanyinchen UMLDemo) 1 高层模块不应该依赖底层模块 2 抽象不应该依赖细节 3 模块间的依赖不是通过实现类发生的,而是由抽象类发生的 4 接口或者抽象类不依

依赖倒置原则(DIP): demo(https://github.com/sanyinchen/UMLDemo) 1.高层模块不应该依赖底层模块 2.抽象不应该依赖细节 3.模块间的依赖不是通过实现类发生的,而是由抽象类发生的 4.接口或者抽象类不依赖于细节 5.实现类依赖于接口或抽象类 书中给出的demo是Driver(司机)开Car(车)的场景。 width=1142从uml图中我们可以很清楚的看到ICar和Idriver这两个接口存在耦合,而不是实现类存在耦合,这样的好处就是,在司机开车这个大前提下,可以让司机开不同的车。 我们来看一下client场景类:

public class Client {

public static void main(String[] args) {

// TODO Auto-generated method stub

IDriver driver=new Driver();

ICar car=new BMW();

driver.driver(car);

car=new Benz();

driver.driver(car);

}

}

我们可以很明显的看到car new出了两辆不同的车,但是Driver并没有做任何修改就可以开动两辆不同的车。 在这里,Driver类就是高层模块,当我们替换底层模块car时,仍然不会影响到Driver类的运行 依赖的写法: (1)接口声明(就是demo的那种写法) (2)构造函数注入 (3)set注入 依赖倒置原则优点以及操作方式: (1) 实现了各个实体类之间的解耦,利于平行开发和测试 (2)每个类尽量都有接口或者抽象类,或者抽象类和接口两者皆可(这是依赖倒置原则的基本要求,有了抽象才能产生倒置依赖) (3)变量的表面类型尽可能是接口或者抽象类型 (4)任何类都不应该从实体类中派生 (5)尽量不要覆写抽象类的方法(依赖倒置原则提倡的是抽象部分依赖,如果覆写了抽象部分则对程序的稳定性会有影响) (6)结合里氏替换原则使用(接口负责定义public属性和方法,并且声明与其他类之间的依赖关系,抽象类负责公共部分的的实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化) 最后说一下何为倒置,一般来说的面向实现编程就是每个实体类进行实实在在的依赖,一般都会这么想,把这个可以理解为正置,那么我们现在是实体类之间并不产生依赖,而是通过抽象类进行依赖,然后由实体类来实现那些互相依赖的抽象类
相关文章
最新文章
热点推荐