4依赖倒转原则DIP
一、什么是倒转?

传统的过程式设计倾向于使高层次的模块依赖于低层次的模块,抽象层依赖 于具体的层次。

二、什么是依赖倒转原则
依赖倒转(Dependence Inversion Principle ):
1.抽象不应该依赖于细节,细节应该依赖于抽 象。
2.高层模块不依赖底层模块,两者都依赖抽象。
三、组装电脑

四、怎样做到依赖倒转
1.工厂方法模式
2.模板方法模式
3.迭代子模式
主板 抽象类
/*
* 主板抽象类
*/
public abstract class MainBoard {
public abstract void doSomething();
}
内存 抽象类
/*
* 内存的抽象类
*/
public abstract class Memory {
public abstract void doSomething();
}
硬盘 抽象类
/*
* 硬盘的抽象类
*/
public abstract class HardDisk {
public abstract void doSomething();
}
华硕主板
/*
* 华硕主板
*/
public class HuaSuoMainBoard extends MainBoard{ public void doSomething() {
System.out.println("this is huasuoMainBoard");
}
}
微星主板
//微星主板
public class WeiXingMainBoard extends MainBoard { public void doSomething() {
System.out.println("this is weixingMainBoard");
}
}
金士顿内存
//金士顿内存
public class JinShiDunMemory extends Memory { public void doSomething() {
System.out.println("this is jinshidunMemory");
}
}
金邦硬盘
//金邦硬盘
public class JinBangMemory extends Memory { public void doSomething() {
System.out.println("this is jinbangMemory");
}
}
西数硬盘
//西数硬盘
public class XiShuHardDisk extends HardDisk { public void doSomething() {
System.out.println("this is xishuHardDisk");
}
}
电脑
/*
* 电脑
*/
public class Computer {
private MainBoard mainBoard;
private Memory memory;
private HardDisk harddisk; public MainBoard getMainBoard() {
return mainBoard;
} public void setMainBoard(MainBoard mainBoard) {
this.mainBoard = mainBoard;
} public Memory getMemory() {
return memory;
} public void setMemory(Memory memory) {
this.memory = memory;
} public HardDisk getHarddisk() {
return harddisk;
} public void setHarddisk(HardDisk harddisk) {
this.harddisk = harddisk;
} public void display() {
mainBoard.doSomething();
memory.doSomething();
harddisk.doSomething();
}
}
测试
public class MainClass {
public static void main(String[] args) {
Computer computer = new Computer();
computer.setMainBoard(new HuaSuoMainBoard());
computer.setMemory(new JinShiDunMemory());
computer.setHarddisk(new XiJieHardDisk());
computer.display();
System.out.println("-------------");
computer.setMainBoard(new WeiXingMainBoard());
computer.display();
}
}
4依赖倒转原则DIP的更多相关文章
- 设计模式之依赖倒转原则(DIP)
1.概念 DIP:Dependency Inversion Principle 抽象不应当依赖于细节,细节应当依赖于抽象(说通俗点也就是要针对接口编程,不要针对实现编程:或者要依赖于抽象,不要依赖于具 ...
- 设计模式原则(3)--Dependency Inversion Principle(DIP)--依赖倒转原则
1.定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 抽象不应该依赖于细节,细节应当依赖于抽象.换言之,要针对接口编程,而不是针对实现编程. 2.使用场 ...
- JAVA设计模式之依赖倒转原则
3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是 ...
- C#软件设计——小话设计模式原则之:依赖倒置原则DIP
前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...
- 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则
单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...
- 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
其他面向对象设计原则3: 依赖倒置原则DIP The Dependency Inversion Principle7.1 依赖倒置原则DIP The Dependency Inversion Pr ...
- [Python设计模式] 第3~5章 单一职责原则/开放-封闭原则/依赖倒转原则
github地址:https://github.com/cheesezh/python_design_patterns 单一职责原则 就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责 ...
- IOS设计模式的六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)
定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象:抽象不应该依赖细节:细节应该依赖抽象. 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原 ...
- 《大话设计模式》num03-04-05---单一职责原则、开放封闭原则、依赖倒转原则
2018年03月03日 21:19:19 独行侠的守望 阅读数个人分类: 设计模式 版权声明:本文为博主原创文章,转载请注明文章链接. https://blog.csdn.net/xiaoanzi12 ...
随机推荐
- Mr. Rito Post Office [Aizu-2200] [图论] [DP]
题意:你是某个岛国(ACM-ICPC Japan )上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛上 ...
- linux查看tomcat安装路径
#查看tomcat安装路径 sudo find / -name *tomcat*
- Jsp俩大内置对象学习
https://www.cnblogs.com/smyhvae/p/4065790.html post与get的区别 最直观的区别就是GET把参数包含在URL中,POST通过request body传 ...
- NodeJS 连接接MySQL
NodeJS 连接接MySQL MySQL是常用数据库,作为后端模块,nodejs可以提供了mysql接口 安装 $ npm install mysql 测试代码 var mysql = requir ...
- redis 作为 mysql的缓存
使用redis做为MySQL的缓存 介绍 在实际项目中,MySQL数据库服务器有时会位于另外一台主机,需要通过网络来访问数据库:即使应用程序与MySQL数据库在同一个主机中,访问MySQL也涉及到 ...
- 通过pip安装python web
提示 No module named 'utils' 我就pip install utils 提示 No module named 'db' 然后我就 pip install db 报错 No mod ...
- Asp.NET WebApi+Redis实现单用户登录实战演练
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理和 ...
- 前端工程化系列[05] Yeoman脚手架使用入门
Yeoman是一款流行的前端的脚手架工具. 脚手架工具可以用来快速的自动生成项目的必要文件和基础文件结构.Yeoman使用的内建命令为yo,同时它自己也是一个包管理工具和自动化任务工具,它基于特定的模 ...
- Vue Element使用icon图标(第三方)
element-ui自带的图标库还是不够全,还是需要需要引入第三方icon,自己在用的时候一直有些问题,参考了些教程,详细地记录补充下 对于我们来说,首选的当然是阿里icon库 教程: 1.打开阿里i ...
- windows环境下面批量修改文件夹名称
ren 1 A ren 2 B ren 3 C ren 4 D 电脑桌面新建文档 ---> 批量修改文件夹名称.txt 修改文件名称为:--->批量修改文件夹名称.bat 内容如上: 双击 ...