依赖倒置原则

依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

依赖倒置原则三层含义:

(1)高层模块不应该依赖低层模块,两者都应该依赖其抽象。
(2)抽象不应该依赖细节。
(3)细节应该依赖抽象。

依赖倒置原则优点

采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。

案例-司机开车案例

依赖倒置原则设计


解释:
在新增低层模块时,只修改了高层模块(业务场景类),对其他低层模块(Driver类)不需要做任何修改,可以把"变更"的风险降低到最低。在Java中,只要定义变量就必然有类型,并且可以有两种类型:表面类型和实际类型,表面类型是在定义时赋予的类型,实际类型是对象的类型。(其实可以理解为面向接口编程)

代码实现

(1)IDriver 接口

package driverCar;public  interface IDriver {public abstract void driver(ICar car) ;}

(2)Driver 类

package driverCar;public class Driver implements IDriver {private String name;public Driver(String name) {this.name = name;}@Overridepublic void driver(ICar car) {System.out.println(this.name+"司机开车。。。。");}}

(3)ICar 接口

package driverCar;public interface ICar {public  abstract void run();
}

(4)Benz 类

package driverCar;public  class Benz implements ICar {@Overridepublic void run() {System.out.println("奔驰车开起来");}   }

(5)BMW 类

package driverCar;public class BMW implements ICar {@Overridepublic void run() {System.out.println("宝马车开起来");}}

(6)测试类

package driverCar;public class Test {public static void main(String[] args) {Driver zhangsan=new Driver("zhangsan");Benz benz=new Benz();BMW bmw=new BMW();zhangsan.driver(benz);zhangsan.driver(bmw);}}

小结

(1)每个类尽量都要有接口或抽象类,或者抽象类和接口都有: 依赖倒置原则的基本要求,有抽象才能依赖倒置变量的表面类型尽量是接口或者抽象类。
(2)任何类都不应该从具体类派生
(3)尽量不要重写基类已经写好的方法(里式替换原则)
(4)结合里式替换原则来使用: 结合里式替换原则和依赖倒置原则我们可以得出一个通俗的规则,接口负责定义public属性和方法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化。

依赖倒置原则应用-司机开车案例相关推荐

  1. 深入浅出设计模式原则之依赖倒置原则

    下面以"顾客购物程序"为例来说明依赖倒置原则的应用(案例源码). #include <QCoreApplication> #include <iostream&g ...

  2. 设计模式之禅之六大设计原则-依赖倒置原则

    依赖倒置原则 依赖倒置原则的原始定义是: ● 高层模块不应该依赖低层模块,两者都应该依赖其抽象; ● 抽象不应该依赖细节; ● 细节应该依赖抽象. 那什么是抽象?什么又是细节呢? ---->在J ...

  3. 设计原则——依赖倒置原则

    1.全称 Dependence Inversion Principle 缩写为:DIP 2.解释 高层模块不应该依赖低层模块,两者都应该依赖其抽象:抽象不应该依赖细节,细节应该依赖抽象 其核心思想是: ...

  4. 设计模式原则之依赖倒置原则

    所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. ...

  5. java设计模式之设计原则②依赖倒置原则

    定义: ⑴高层模块不应该依赖低层模块,二者都应该依赖其抽象 ⑵抽象不应该依赖细节,细节应该依赖抽象 ⑶针对接口编程,不要针对实现编程 我们通过抽象包括使用接口或者抽象类可以使各个类或模块的实现彼此独立 ...

  6. 设计模式六大原则之--依赖倒置原则(DIP)

    1. 依赖倒置原则,(Dependence Inversion Principle, DIP ) 定义:High level modules should not depend upon low le ...

  7. 软件设计的七大原则 --开闭原则 里氏替换原则 依赖倒置原则

    在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率.节约软件开发成本和维护成本. 这 7 种设计原则是软件设计 ...

  8. 《设计模式之禅(第三版)》 摘录篇-------依赖倒置原则

    依赖倒置原则((Dependence Inversion Principle,DIP)) 原始定义:High level modules should not depend upon low leve ...

  9. Dependence Inversion Principle 依赖倒置原则

    Dependence Inversion Principle 依赖倒置原则 简介 定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象 主要核心思想 强调抽象不应该依赖细节:细节应该依赖抽象,及针对 ...

  10. 3.六大原则例子-- 依赖倒置原则(DIP)例子

    设计模式六大原则例子-- 依赖倒置原则(DIP)例子 之前我们对设计模式的六大原则做了简单归纳,这篇博客是对依赖倒置原则进行的举例说明. 依赖倒置原则的意义 DIP是6大原则中最难以实现的原则,它是实 ...

最新文章

  1. SQL数据库学习之路(五)
  2. mac基本操作技巧_6个基本设计技巧
  3. 深度学习《残差网络简单学习》
  4. 为什么最近「骚扰电话」明显越来越多了?
  5. Notice: Undefined offset 的解决方法
  6. poi设置自动换行后显示不全_抖音企业号权益之POI领多和地址内容编辑,视频编辑...
  7. 表格列数太多 页面怎么设计_B端产品设计规范分享
  8. Python与C:指针与按址传递
  9. Unknown type name 'class'; did you mean 'Class'? 问题的解决
  10. julia安装源_Julia 国内镜像安装实测
  11. 司机秘书:让司机省心的违章查询助手
  12. MATLAB--从正弦波转换为方波(验证傅里叶级数)
  13. spec 文件 autopatch
  14. 打不开网页服务器丢失,苹果浏览器safari打不开,丢失网络
  15. 拳王虚拟项目公社:你最重要的事情是什么?
  16. linux下的/usr目录
  17. 三菱PLC步进伺服控制程序 用三菱plc和威纶触摸屏编写
  18. 学习Python编程好找工作吗?
  19. java中常用的加密工具
  20. 杀疯了!本科大神毕设:3D虚拟主播软件!独创AR直播!支持OBS!开源!

热门文章

  1. 最小二乘法以及正交最小二乘(OLS)的推导与简单比较
  2. 苹果按键强制恢复出厂_【数码】苹果手机忘了解锁密码不要慌,你可以这样做!...
  3. 8086汇编基础 8080,8088,8086,80286,80386的地址线,数据线宽度
  4. 【博客之星】总结和分享是一种习惯
  5. 网页设计html颜色大全,50个使用柔和色彩的网页设计作品欣赏
  6. CS224N NLP
  7. 工作频率对系统功率、穿透能力、设备体积、系统性能的影响
  8. 影视剪辑,零基础如何自学入门剪辑,视频剪辑入门规划
  9. macOS 卡顿或无法启动怎么办?教你重置Mac苹果SMC、NVRAM、PRAM
  10. h5 ios 切入后台运行倒计时问题