一、什么是倒转?

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

二、什么是依赖倒转原则

  依赖倒转(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的更多相关文章

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

    1.概念 DIP:Dependency Inversion Principle 抽象不应当依赖于细节,细节应当依赖于抽象(说通俗点也就是要针对接口编程,不要针对实现编程:或者要依赖于抽象,不要依赖于具 ...

  2. 设计模式原则(3)--Dependency Inversion Principle(DIP)--依赖倒转原则

    1.定义: 高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 抽象不应该依赖于细节,细节应当依赖于抽象.换言之,要针对接口编程,而不是针对实现编程. 2.使用场 ...

  3. JAVA设计模式之依赖倒转原则

    3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是 ...

  4. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做“全战”, ...

  5. 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则

    单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...

  6. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle7.1 依赖倒置原则DIP The Dependency Inversion Pr ...

  7. [Python设计模式] 第3~5章 单一职责原则/开放-封闭原则/依赖倒转原则

    github地址:https://github.com/cheesezh/python_design_patterns 单一职责原则 就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责 ...

  8. IOS设计模式的六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)

    定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象:抽象不应该依赖细节:细节应该依赖抽象. 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原 ...

  9. 《大话设计模式》num03-04-05---单一职责原则、开放封闭原则、依赖倒转原则

    2018年03月03日 21:19:19 独行侠的守望 阅读数个人分类: 设计模式 版权声明:本文为博主原创文章,转载请注明文章链接. https://blog.csdn.net/xiaoanzi12 ...

随机推荐

  1. redis:order set有序集合类型的操作(有序集合)

    1. order set有序集合类型的操作(有序集合) 有序集合是在无序集合的基础上加了一个排序的依据,这个排序依据叫score,因此声明一个集合为有序集合的时候要加上score(作为排序的依据) 1 ...

  2. 线段树模板hdu 1166:敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. 微信小程序内联h5页面,实现分享

    在小程序内直联h5的页面(pages/webview/webview.js),该页面为<web-view>的容器,使用<web-view>组件 <web-view wx: ...

  4. Gson学习文档

    Gson:学习系列 http://www.codeceo.com/article/java-json-api-gson-1.html

  5. HTML自学笔记

    HTML自学笔记 1.HTML Hyper Text Markup Language 超文本标记语言 超文本:比普通文本更加强大,可以添加各种样式 标记语言:通过一组标签来对内容进行描述. 标签:&l ...

  6. 什么是crf

    什么是crf 利用crf++进行实体识别的流程 确定标签体系: 确定特征模板文件: 处理训练数据文件: 模型训练. 确定标签体系 大部分情况下,标签体系越复杂准确度也越高,但相应的训练时间也会增加.因 ...

  7. JavaWeb中过滤器Filter的使用示例

    https://github.com/YouXianMing/Java-Web-Study/tree/master/Servlet-Filter 过滤器示例基于以下流程 测试效果如下 web.xml配 ...

  8. IDEA下Maven的Offline Mode

    今天上午别人加了一个Maven依赖项(dependency)我始终获取不到本地 Maven的setting.xml文件检查没有问题 根目录的pom.xml检查也没有问题 本来怀疑公司的Maven服务器 ...

  9. Elasticsearch跨集群搜索(Cross Cluster Search)

    1.简介 Elasticsearch在5.3版本中引入了Cross Cluster Search(CCS 跨集群搜索)功能,用来替换掉要被废弃的Tribe Node.类似Tribe Node,Cros ...

  10. HTTPS之acme.sh申请证书

    1.关于let's encrypt和acme.sh的简介 1.1 let's encrypt Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安 ...