Java设计模式七大原则-依赖倒转(倒置)原则
目录
依赖倒转原则
依赖关系传递的三种方式和应用案例
1. 接口传递
2.构造方法传递
3.setter方式传递
依赖倒转原则的注意事项和细节
依赖倒转原则
基本介绍
- 依赖倒转原则(Dependence Inversion Principle)是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 依赖倒转(倒置)的中心思想是面向接口编程
- 依赖倒转原则是基于这样的设计理念: 相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类
- 使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成
例子
完成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();}
}
运行结果
依赖倒转原则的注意事项和细节
- 低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
- 变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化
- 继承时遵循里氏替换原则
Java设计模式七大原则-依赖倒转(倒置)原则相关推荐
- 设计模式原则之依赖倒转(倒置)原则
设计模式原则之依赖倒转(倒置)原则 原则概述 依赖倒转原则(Dependence Inversion Principle)是指: 高层模块不应该依赖底层模块,二者都应该依赖其(或接口)抽象(不要依赖具 ...
- 六大原则之依赖倒转(倒置)原则
1. 依赖倒转(倒置)原则 介绍 高层模块不应该依赖低层模块,二者都应该依赖其抽象 抽象不应该依赖细节,细节应该依赖抽象 依赖倒转(倒置)的中心思想是面向接口编程 依赖倒转原则是基于这样的设计理念:相 ...
- 浅谈设计模式-依赖倒转(倒置)原则
书接上回,本篇继续讲一下设计模式六大原则(有些书认为是7大原则) 原则定义 1>高层次的模块不要依赖低层次的模块,二者都应该依赖于其抽象 2>抽象不应该依赖于具体,而是具体应该依赖于抽象 ...
- Java设计模式七大原则-单一职责原则
目录 概述:设计模式的目的 设计模式七大原则 单一职责原则 单一职责原则注意事项和细节 概述:设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等 ...
- Java设计模式-七大设计原则
Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...
- JAVA设计模式七大原则
设计模式七大原则 设计模式目的 1.代码重用性 2.可读性 3.可读性 4.扩展性 5.可靠性 6.高内聚低耦合 七大原则 1.单一职责原则 一个类或方法中只做一件事情 2.接口隔离原则 一个类通过接 ...
- 依赖倒置原则——举例说明Java设计模式中的依赖倒置原则
依赖倒置原则--举例说明Java设计模式中的依赖倒置原则 一.前言 看官方定义 二.举例说明 2.1 例子介绍(无聊的可看看,着急的请跳过) 2.2 反例 2.1.1 反例1 (1)类图说明 (2)代 ...
- 设计模式七大原则——依赖倒转原则
1.什么是依赖倒转原则? 高层模块不应该依赖低层模块,二者都应该依赖其抽象. 抽象不应该依赖细节,细节应该依赖抽象. 依赖倒转 (倒置) 的中心思想是面向接口编程. 依赖倒转原则是基于这样的设计理念: ...
- 设计模式常用的七大原则之③【依赖倒转】原则
文章目录 概念 案例 代码1.0 解决思路 依赖关系传递的三种方式和应用案例 接口传递 构造方法传递 set传递 依赖倒转原则的注意事项和细节 概念 依赖倒转原则(Dependence Inversi ...
最新文章
- Spring知识点总结-2
- C++ Code_ImageList
- iOS Sprite Kit教程之xcode安装以及苹果帐号绑定
- Android时间选择器对话框的使用
- PyTorch教程(七):属性统计
- 子集—leetcode78
- markdown 流程图_测试了12款Markdown编辑器,推荐一个最好用的!
- centos overlay 占用很大_盘锦技术好的升降货梯占用空间小
- 手把手教你最好用的数据分析方法,会用的没几个
- flask + apidoc 生成接口文档(附加一个坑)
- 软考笔记(数据结构篇)———— 二叉树、树、森林转换
- Android开发实战记录
- 简单的SQL数据脱敏
- 作为产品经理为什么选择开源GIS
- 电视剧 | 黑镜S5E3 瑞秋洁柯小艾希莉
- python学习笔记——取矩阵的上三角或下三角元素
- 关联规则:R与SAS的比较
- 九、【服务器】服务器硬件名称中英文汇总2
- iOS12加密相册、保险箱打开就闪退的,关闭4g和WiFi即可正常使用
- 【One Page】概率论复习|Probability Theory Review