一、什么是倒转?

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

二、什么是依赖倒转原则

  依赖倒转(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. Java 装饰模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...

  2. Egret 获取不到皮肤中的按钮 id

    最近Egret开发中遇到的Q,Egret 获取不到皮肤中的按钮 id,也就没法针对按钮进行监听和执行对应操作: 问题的关键就是,exml获取应该出现了差错: 经过查询我发现this.skinName的 ...

  3. IE内核浏览器的404页面问题和IE自动缓存引发的问题

    本站404页面被IE替换成IE自己的404页面 在权限设置正确的情况下,自定义的404页面文件大小如果小于512字节,那么IE内核的浏览器会认为你自定义的404页面不够权威,从而使用其自带的404页面 ...

  4. Vue(二十二)vuex小案例(官网计数案例整合)

    1.使用 vue-cli 创建项目(具体操作可以参考前面的文章) ... 2.下载 vuex - npm install vuex -S 3.将 vuex 添加到项目中 (1)在项目中创建store文 ...

  5. springboot邮件发送与接收读取

    发送邮件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  6. androidstudio全局搜索快捷键Ctrl+Shift+F失效的解决办法

    与输入法设置冲突!!修改了就可以了.用的搜狗输入法,它的此快捷键也为简繁体替换.修改成其他的即可 null

  7. Spark(四十五):Schema Registry

    很多时候在流数据处理时,我们会将avro格式的数据写入到kafka的topic,但是avro写入到kafka的时候,数据有可能会与版本升级,也就是schema发生变化,此时如果消费端,不知道哪些数据的 ...

  8. codeforces 13EE. Holes(分块&amp;动态树)

    E. Holes time limit per test 1 second memory limit per test 64 megabytes input standard input output ...

  9. 【PMP】项目管理ITTO概述

    1.项目整合管理

  10. 在Ubuntu18.04下配置HBase

    HBase在HDFS基础上提供了高可靠, 列存储, 可扩展的数据库系统. HBase仅能通过主键(row key)和主键的range来检索数据, 主要用来存储非结构化和半结构化的松散数据. 与Hado ...