1. 依赖倒转(倒置)原则 介绍

  • 高层模块不应该依赖低层模块,二者都应该依赖其抽象

  • 抽象不应该依赖细节,细节应该依赖抽象

  • 依赖倒转(倒置)的中心思想是面向接口编程

  • 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在 java 中,抽象指的是接口或抽象类,细节就是具体的实现类

  • 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成

2. 传统的调用方法

package com.study;public class DependencyInversion {public static void main(String[] args) {Person person = new Person();person.receive(new Email());}
}class Email {public String getInfo(){return "电子邮件信息: hello,world";}
}/*** 1.优点:调用方式简单* 2.存在问题:如果我们获取的对象是 微信,短信等等,则新增类,同时 Person 也要增加相应的接收方法* 3.解决方法:引入一个抽象的接口 IReceiver, 表示接收者, 这样 Person 类与接口 IReceiver 发生依赖 * 因为 Email, WeiXin 等等属于接收的范围,他们各自实现 IReceiver 接口, 这样我们就符号依赖倒转原则*/
class Person {public void receive(Email email){System.out.println(email.getInfo());}
}

3. 通过依赖倒转的案例

package com.study;public class DependencyInversion {public static void main(String[] args) {Person person = new Person();person.receive(new Email());person.receive(new WX());}
}interface IReceive {String getInfo();
}class Email implements IReceive{public String getInfo(){return "电子邮件信息: hello,world";}
}//添加微信类
class WX implements IReceive{public String getInfo(){return "微信信息: hello,world";}
}class Person {public void receive(IReceive iReceive){System.out.println(iReceive.getInfo());}
}

4. 依赖关系传递的三种方式

接口传递,构造方法传递,setter 方式传递

4.1 接口传递

package com.study;public class DependencyPass {public static void main(String[] args) {OpenAndClose openAndClose = new OpenAndClose();openAndClose.open(new ChangHong());}
}//ITV 接口
interface ITV {void play();
}class ChangHong implements ITV {@Overridepublic void play() {System.out.println("长虹电视机,打开");}
}interface IOpenAndClose {void open(ITV tv);
}class OpenAndClose implements IOpenAndClose{public void open(ITV tv){tv.play();}
}

4.2 构造方法传递

package com.study;public class DependencyPass {public static void main(String[] args) {OpenAndClose openAndClose = new OpenAndClose(new ChangHong());openAndClose.open();}
}//ITV 接口
interface ITV {void play();
}class ChangHong implements ITV {@Overridepublic void play() {System.out.println("长虹电视机,打开");}
}interface IOpenAndClose {void open();
}class OpenAndClose implements IOpenAndClose{//成员public ITV itv;//构造器public OpenAndClose(ITV itv) {this.itv = itv;}public void open(){itv.play();}
}

4.3 setter 方式传递

package com.study;public class DependencyPass {public static void main(String[] args) {OpenAndClose openAndClose = new OpenAndClose();openAndClose.setITV(new ChangHong());openAndClose.open();}
}//ITV 接口
interface ITV {void play();
}class ChangHong implements ITV {@Overridepublic void play() {System.out.println("长虹电视机,打开");}
}interface IOpenAndClose {void open();void setITV(ITV itv);
}class OpenAndClose implements IOpenAndClose{private ITV itv;@Overridepublic void setITV(ITV itv) {this.itv = itv;}public void open(){itv.play();}
}

5. 依赖倒转原则的注意事项和细节

  • 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好

  • 变量的声明类型尽量是抽象类或接口, 这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化

  • 继承时遵循里氏替换原则

六大原则之依赖倒转(倒置)原则相关推荐

  1. 设计模式原则之依赖倒转(倒置)原则

    设计模式原则之依赖倒转(倒置)原则 原则概述 依赖倒转原则(Dependence Inversion Principle)是指: 高层模块不应该依赖底层模块,二者都应该依赖其(或接口)抽象(不要依赖具 ...

  2. Java设计模式七大原则-依赖倒转(倒置)原则

    目录 依赖倒转原则 依赖关系传递的三种方式和应用案例 1. 接口传递 2.构造方法传递 3.setter方式传递 依赖倒转原则的注意事项和细节 依赖倒转原则 基本介绍 依赖倒转原则(Dependenc ...

  3. 浅谈设计模式-依赖倒转(倒置)原则

    书接上回,本篇继续讲一下设计模式六大原则(有些书认为是7大原则) 原则定义 1>高层次的模块不要依赖低层次的模块,二者都应该依赖于其抽象 2>抽象不应该依赖于具体,而是具体应该依赖于抽象 ...

  4. 设计模式常用的七大原则之③【依赖倒转】原则

    文章目录 概念 案例 代码1.0 解决思路 依赖关系传递的三种方式和应用案例 接口传递 构造方法传递 set传递 依赖倒转原则的注意事项和细节 概念 依赖倒转原则(Dependence Inversi ...

  5. java依赖倒转原则_设计原则之--依赖倒转原则

    [各位博友晚上好,又到了晚上的这个时间,感谢大家一直对Darren博客的支持,希望这篇文章对你有所帮助: 这几天一直在看设计模式:简单工厂模式,策略模式,单一职责原则,开放 [依赖倒转原则又称依赖倒置 ...

  6. 【设计模式】七大原则之“依赖倒转原则”

    一 基本介绍 依赖倒转原则(Dependence Inversion Principle)是指: 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置 ...

  7. 面向对象编程原则(06)——依赖倒转原则

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 参考资料 <大话设计模式> 作者:程杰 <Java设计模式> 作者:刘 ...

  8. Java里氏转换_里氏代换原则、依赖倒转原则 | 学步园

    里氏代换原则 面向对象设计的重要原则是创建抽象化,并且从抽象化导出具体化,具体化也就是给出不同的实现. 继承关系就是一种从抽象化到具体化的导出. 里氏代换原则:如果对每一个类型为T1的对象o1,都有类 ...

  9. 设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则

    (3)单一职责原则 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因.例如,我们在写一个窗体应用程序,一般都会生成一个Form这样的类,于是我们就把各种各样的代码,像算法.数据库访问 ...

最新文章

  1. UBUNTU安装 Rabbitvsc可视化版本控制客户端软件
  2. 完成AOP 顶层设计-AopProxy
  3. C++设计模式之访问者模式
  4. linux网站渗透工具包,ubuntu下安装 kali linux 渗透工具包
  5. 一些比较有用的SQL操作,2011最新整理
  6. SQL Server链接服务器 Linked Server
  7. 1981年长城一元硬币值钱吗?
  8. 显示器驱动程序已停止响应 并且已成功恢复
  9. 心理平衡其实就这么简单
  10. Android dex修复工具,Android 简单热修复(下)——基于DexClassLoader的实现
  11. web前端顶岗实习总结报告_假期web前端实习报告
  12. Excel 行列转换的最简方法
  13. TV(电视)应用开发指南
  14. 在线绘制2维/3维函数图像、求导网站
  15. ios 渐变透明背景_PS教程:通道抠图技巧换背景案例
  16. 杰理-手表-AC701-watch-添加表盘
  17. 人脂肪前体细胞,研究糖尿病胰岛抵抗、肥胖的优秀体外模型
  18. 原子操作(Atomic)
  19. 特战旅php 视频_15个特战旅精锐大比拼,新特种部队就一定差劲?咱们用实力来说话...
  20. 世界杯历史:1930年---2002年(乌拉圭---韩日)

热门文章

  1. pmu2008终端服务器,PMU升级指导.doc
  2. python repl_Python 3.8新特征之asyncio REPL
  3. 计算机更新时按了关机6,电脑关机后在安装更新怎么办
  4. java espresso_java – 带有片段的Android Espresso功能测试
  5. 电瓶车.换电瓶(20181122)
  6. 多久才能学会php,php零基础自学的话多久可以学会?
  7. vue 的酒店⺠宿⽹站毕业设计源码250910
  8. Centernet 生成高斯热图
  9. 阿尔弗雷德.爱因斯坦论莫扎特钢协
  10. 投资中最简单的事--阅读笔记