Java设计模式——依赖倒转原则(实例)
1、基本介绍
- 高层模块不应该依赖低层模块,二者都应该依赖其抽象
- 抽象不应该依赖细节,细节应该依赖抽象
- 依赖倒转的中心思想是面向接口编程
- 依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象指的是接口或抽象类,细节就是具体的实现类
- 使用接口或抽象类的目的是制定好的规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成
2、应用实例
编程完成Person接收消息的功能
2.1未遵循依赖倒转原则
以下方式:简单,比较容易想到
如果获取的对象是WetChat,短信等,则需要新增类,同时也要增加Person相对应的接收方法
package com.weirdo.principle.inversion;
public class inversion {public static void main(String[] args) {Person person = new Person();person.receive(new Email());}
}
class Email{public String getInfo(){return "邮件信息:hello world";}
}
class Person{public void receive(Email email){System.out.println(email.getInfo());}
}
2.2遵循依赖倒转原则
引入一个抽象的接口IReceiver,表示接收者,让Person类与接口IReceiver发生依赖
因为Email,WetChat等属于接收的范围,他们各自实现IReceiver接口就行了,如此便符合依赖倒转原则
package com.weirdo.segregation;public class Segregation1 {public static void main(String[] args) {A a = new A();a.depend1(new B());//A类通过接口去依赖B类a.depend2(new B());a.depend3(new B());C c = new C();c.depend1(new D());//C类通过接口去依赖D类c.depend4(new D());c.depend5(new D());}
}interface Interface1 {void operation1();
}
interface Interface2{void operation2();void operation3();
}
interface Interface3{void operation4();void operation5();
}class B implements Interface1,Interface2{@Overridepublic void operation1() {System.out.println("B 实现了 operation1");}@Overridepublic void operation2() {System.out.println("B 实现了 operation2");}@Overridepublic void operation3() {System.out.println("B 实现了 operation3");}
}class D implements Interface1,Interface3{@Overridepublic void operation1() {System.out.println("D 实现了 operation1");}@Overridepublic void operation4() {System.out.println("D 实现了 operation4");}@Overridepublic void operation5() {System.out.println("D 实现了 operation5");}
}/**
* 类A通过接口Interface1依赖(使用)B类,但是之会用到1,2,3方法
*/
class A{public void depend1(Interface1 i){i.operation1();}public void depend2(Interface2 i){i.operation2();}public void depend3(Interface2 i){i.operation3();}
}/**
* 类C通过接口Interface1依赖(使用)D类,但是之会用到1,4,5方法
*/
class C{public void depend1(Interface1 i){i.operation1();}public void depend4(Interface3 i){i.operation4();}public void depend5(Interface3 i){i.operation5();}
}
3、注意事项和细节
- 底层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好
- 变量的声明类型尽量是抽象类或接口,这样变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化
- 继承时遵循里斯替换原则
Java设计模式——依赖倒转原则(实例)相关推荐
- Java设计模式——依赖倒转原则
一.什么是依赖倒转原则? 依赖倒转原则讲的是,要依赖于抽象,不要依赖于具体. 实现"开-闭"原则的关键是抽象化,并且从抽象化导出具体化实现."开-闭"原则是面向 ...
- Java设计模式 - 依赖倒转原则
文章目录 1. 违反依赖倒转原则 2. 遵守依赖倒转原则 3. 依赖关系传递的3种方式 3.1 接口传递 3.2 构造方法传递 3.3 setter方法传递 4. 依赖倒转原则的注意事项和细节 Dep ...
- 23种设计模式-依赖倒转原则
概念: 依赖倒转原则(Dependence Inversion Principle)是指: 1) 高层模块不应该依赖低层模块,二者都应该依赖其抽象 2) 抽象不应该依赖细节,细节应该依赖抽象 3) 依 ...
- [设计模式]依赖倒转原则
代码如下: #include <iostream> #include <string>using namespace std;//银行工作人员 class BankWorker ...
- 设计模式--依赖倒转原则
依赖倒转原则:依赖于抽象类(接口类),不依赖于具体实现类 即:高层业务逻辑依赖抽象类,具体实现类 依赖于抽象业务逻辑 高层逻辑为:软件设计具体需求(eg:制造一台电脑) 抽象层为:很多抽象类(eg:电 ...
- Java设计模式——开闭原则(实例)
1.基本介绍 开闭原则是编程中最基础.最重要的设计原则 一个软件实体,如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框架,用实现扩展细节. 当软件需要变化时,尽量通过扩 ...
- Java设计模式——单一责任原则(实例)
1.基本介绍 对类来说,即一个类应该只负责一项职责. 如类A负责两个不同职责:职责1,职责2.当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分为A1,A2 2.应用实例 2. ...
- 设计模式依赖倒转原则
- Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)
1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...
最新文章
- POJ3080方法很多(暴力,KMP,后缀数组,DP)
- VPS批量管理软件--远程桌面批量管理
- python进阶 多线程编程 —— threading和queue库实现多线程编程
- spring Aop实现身份验证和springboot异常统一处理
- 【Spring实战4】04---装配Bean(自动装配)
- larvare数据库引入php_PHP全栈学习笔记6
- ajax里怎么添加跳转地址,Ajax中window.location.href无法跳转的解决办法
- liunx中udp服务器与客户端创建
- mysql begin operations_MySQL入门(七):More JOIN operations
- oracle获取SID
- 安装Sql server 2008遇到无法安装.net 3.5的问题解决办法
- Banner字符可以通过类似以下网站生成
- python-excel 批量新建excel工作表
- 日本初创公司Elix正在使用AI研究COVID-19药物
- Apple ID更换绑定的受信任电话号码教程
- MacBook 版 IDEA- 2022.2 新版本UI插件
- 360锁屏壁纸在哪个文件夹
- Java零基础P20使用IDEA开发
- HP笔记本HDMI检测不到外接显示器
- val和var的区别