设计模式6大原则(3):依赖倒置原则

依赖倒置原则

依赖倒置原则:Dependence Inversion Principle(DIP)

       这个原则命名是根据功能来的,看到名字就能想到功能,依赖倒置,那么就有依赖正置了,也就是正常依赖,什么意思呢,正常依赖就是用什么依赖是什么,比如ArrayList list = new ArrayList();用到ArrayList,就创建ArrayList。那么我们看看什么是依赖倒置,怎么倒置,为什么要倒置,怎么倒置。

       定义:  

       1.高层模块不应该依赖低层模块,它们都应该依赖于抽象。

       2.抽象不应该依赖细节,细节应该依赖抽象,要面向接口编程,不要面向实现编程。

       理解概念先理解什么是抽象,什么是细节或具体实现。Java中,抽象就是接口或者抽象类,他们定义标准或方法,而不实现,具体细节实现就是指具体的功能实现类,完成具体业务逻辑的类、功能或模块等。

       依赖倒置就是说,高层模块不应该依赖低层模块,而是应该依赖抽象,其实这个我们平时经常写,比如

     List list = newArrayList();
     //或
     public voidgetCount(List list);


       而不写成下面这个

     ArrayListlist2 = new ArrayList();
     //或
     public void getCount(ArrayList list);
     //依赖了具体实现,这样以后换成其他的实现,此处也需要变化。


       这里面List就是抽象,ArrayList就是具体。

       高层不依赖低层,目的是解耦和,这样低层功能改变,高层不需要变化,不影响高层功能。那么高层不依赖低层,怎么去调用低层的功能呢,就是依赖抽象,比如我高层依赖接口List,不管低层是ArrayList,还是LinkedList,还是其他List,都不影响高层功能改变。相反,依赖具体实现,比如依赖ArrayList,那么低层改变时,比如ArrayList要变,或者换成其他List,就会影响到高层功能。其实这也把第二个含义说了,依赖抽象,而不依赖具体细节,面向接口编程,而不是面向实现。

       依赖倒置原则在Java中的表现就是:

       1.模块间的依赖通过抽象发生,实现类之间不发生直接依赖关系,依赖关系是通过接口或抽象类产生的;

       2.接口或抽象类不依赖具体实现;

       3.实现类依赖接口或抽象类。

       面向接口编程也是OOD(Object-Oriented Design,面向对象设计)的精髓之一。

       在我们日常工作编程中,如何做到呢,设计模式之禅上总结了一些

       1.每个类尽量都有接口或抽象类,或者抽象类和接口两者都具备;这是依赖倒置原则的基本要求,有抽象才有可能依赖倒置;

       2.变量的表面类型尽量是接口或者是抽象类,这点尽量做到,有些时候也可以不需要,比如工具类,或者要使用clone方法等,但是毕竟是少数;

       3.任何类都不应该从具体类派生,这点也不是绝对的,因为实际情况千差万别,有可能设计缺陷,也可能维护项目不了解父类,直接继承覆写一个方法更容易,这个要具体情况具体分析;

       4.尽量不要覆写基类的方法,尤其是基类是抽象类,而且方法已经实现好了。只是尽量,不是绝对还是那句话,具体情况具体分析;

       5.结合里氏替换原则使用,里氏替换原则讲,父类出现的地方子类就能出现。两个原则结合,就是接口定义public属性或方法,声明好依赖关系,抽象类负责公共构造部分实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值