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

前端之家收集整理的这篇文章主要介绍了设计模式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属性方法,声明好依赖关系,抽象类负责公共构造部分实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化。

原文链接:https://www.f2er.com/javaschema/286182.html

猜你在找的设计模式相关文章