目录

依赖倒转原则

依赖关系传递的三种方式和应用案例

1. 接口传递

2.构造方法传递

3.setter方式传递

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


依赖倒转原则

基本介绍

  1. 依赖倒转原则(Dependence Inversion Principle)是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象
  2. 抽象不应该依赖细节,细节应该依赖抽象
  3. 依赖倒转(倒置)的中心思想是面向接口编程
  4. 依赖倒转原则是基于这样的设计理念: 相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类
  5. 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成

例子

完成person接收消息

public class DependencyInvertion {public static void main(String[] args) {Person person = new Person();person.receive(new Email());}
}class Email {public String getInfo() {return "电子邮件信息:hello";}
}//完成person接收消息的功能
class Person {public void receive(Email email) {System.out.println(email.getInfo());}
}

运行结果

分析

问题:虽然比较容易想到且实现起来很简单,但是当我们接收消息的类不是email,而是message或者WeChat的时候,我们就需要新建类,且Person类需要新增方法,因为它的方法的参数已经定义为Email类

解决思路

引入一个抽象的接口IReceiver,表示接收者,这样Person类与接口IReceiver发生依赖因为Email,Weixin 等等属于接收的范围,他们各自实现IReceiver 接口就ok,这样我们就符合依赖倒转原则

例子改进

可以看到依赖抽象(接口或者抽象类)的稳定性相比于依赖细节(具体实现)更高,不需要增加方法,只需要增加类即可

public class DependencyInvertion {public static void main(String[] args) {//客户端无需改变Person person = new Person();person.receive(new Email());person.receive(new WeChat());}
}interface IReceive {public String getInfo();
}class Email implements IReceive{public String getInfo() {return "电子邮件信息:hello,Email";}
}class WeChat implements IReceive {@Overridepublic String getInfo() {return "微信信息:hello,Wechat";}
}//完成person接收消息的功能
class Person {public void receive(IReceive receive) {System.out.println(receive.getInfo());}
}

运行结果

依赖关系传递的三种方式和应用案例

1. 接口传递

// 方式 1: 通过接口传递实现依赖
// 开关的接口
interface IOpenAndClose {public void open(ITV tv);//抽象方法,接收接口
}
interface ITV { //ITV接口public void play();
}
class ChangHong implements ITV {@Overridepublic void play() {System.out.println("长虹电视机开启");}
}
//实现接口
class OpenAndClose implements IOpenAndClose{public void open(ITV tv){tv.play();}
}

2.构造方法传递

public class DependencyInvertion {public static void main(String[] args) {ChangHong changHong = new ChangHong();OpenAndClose openAndClose = new OpenAndClose(changHong);openAndClose.open();}
}
// 方式2: 通过构造方法依赖传递
interface IOpenAndClose {public void open();
}
//抽象方法
interface ITV {//ITV接口public void play();
}class ChangHong implements ITV {@Overridepublic void play() {System.out.println("长虹电视机开启");}
}
class OpenAndClose implements IOpenAndClose{public ITV tv; //成员public OpenAndClose(ITV tv) { //构造器this.tv = tv;}public void open(){this.tv.play();}
}

3.setter方式传递

public class DependencyInvertion {public static void main(String[] args) {ChangHong changHong = new ChangHong();OpenAndClose openAndClose = new OpenAndClose();openAndClose.setTv(changHong);openAndClose.open();}
}
// 方式3,通过setter方法传递
interface IOpenAndClose {public void open(); // 抽象方法public void setTv(ITV tv);
}interface ITV { // ITV接口public void play();
}
class ChangHong implements ITV {@Overridepublic void play() {System.out.println("长虹电视机开启");}
}
class OpenAndClose implements IOpenAndClose {private ITV tv;public void setTv(ITV tv) {this.tv = tv;}public void open() {this.tv.play();}
}

运行结果

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

  1. 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
  2. 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化
  3. 继承时遵循里氏替换原则

Java设计模式七大原则-依赖倒转(倒置)原则相关推荐

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

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

  2. 六大原则之依赖倒转(倒置)原则

    1. 依赖倒转(倒置)原则 介绍 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置)的中心思想是面向接口编程 依赖倒转原则是基于这样的设计理念:相 ...

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

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

  4. Java设计模式七大原则-单一职责原则

    目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...

  5. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

  6. JAVA设计模式七大原则

    设计模式七大原则 设计模式目的 1.代码重用性 2.可读性 3.可读性 4.扩展性 5.可靠性 6.高内聚低耦合 七大原则 1.单一职责原则 一个类或方法中只做一件事情 2.接口隔离原则 一个类通过接 ...

  7. 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则

    依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...

  8. 设计模式七大原则——依赖倒转原则

    1.什么是依赖倒转原则? 高层模块不应该依赖低层模块,二者都应该依赖其抽象. 抽象不应该依赖细节,细节应该依赖抽象. 依赖倒转 (倒置) 的中心思想是面向接口编程. 依赖倒转原则是基于这样的设计理念: ...

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

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

最新文章

  1. Spring知识点总结-2
  2. C++ Code_ImageList
  3. iOS Sprite Kit教程之xcode安装以及苹果帐号绑定
  4. Android时间选择器对话框的使用
  5. PyTorch教程(七):属性统计
  6. 子集—leetcode78
  7. markdown 流程图_测试了12款Markdown编辑器,推荐一个最好用的!
  8. centos overlay 占用很大_盘锦技术好的升降货梯占用空间小
  9. 手把手教你最好用的数据分析方法,会用的没几个
  10. flask + apidoc 生成接口文档(附加一个坑)
  11. 软考笔记(数据结构篇)———— 二叉树、树、森林转换
  12. Android开发实战记录
  13. 简单的SQL数据脱敏
  14. 作为产品经理为什么选择开源GIS
  15. 电视剧 | 黑镜S5E3 瑞秋洁柯小艾希莉
  16. python学习笔记——取矩阵的上三角或下三角元素
  17. 关联规则:R与SAS的比较
  18. 九、【服务器】服务器硬件名称中英文汇总2
  19. iOS12加密相册、保险箱打开就闪退的,关闭4g和WiFi即可正常使用
  20. 【One Page】概率论复习|Probability Theory Review

热门文章

  1. 什么是ThoughtWorks技术雷达?
  2. Project 2007安装出现错误及解决方案
  3. 您玩儿转手机通讯录了吗?
  4. 数据中台与数据仓库的区别?
  5. 析构函数和this指针
  6. 博瑞传播 php,相关博客
  7. sql2000备份数据库文件如何还原到sql2008数据库中
  8. 拒绝服务 DDoS 攻击
  9. 计算机科学与技术专业前景分析,计算机科学与技术专业前景分析
  10. 国家科技奖计算机,国家科学技术奖励大会