一、什么是倒转?

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

二、什么是依赖倒转原则

  依赖倒转(Dependence Inversion Principle ):

    1.抽象不应该依赖于细节,细节应该依赖于抽 象。

    2.高层模块不依赖底层模块,两者都依赖抽象。

三、组装电脑

四、怎样做到依赖倒转

  1.工厂方法模式   

  2.模板方法模式

  3.迭代子模式

主板  抽象类

  1. /*
  2. * 主板抽象类
  3. */
  4. public abstract class MainBoard {
  5. public abstract void doSomething();
  6. }

内存  抽象类

  1. /*
  2. * 内存的抽象类
  3. */
  4. public abstract class Memory {
  5. public abstract void doSomething();
  6. }

硬盘  抽象类

  1. /*
  2. * 硬盘的抽象类
  3. */
  4. public abstract class HardDisk {
  5. public abstract void doSomething();
  6. }

华硕主板

  1. /*
  2. * 华硕主板
  3. */
  4. public class HuaSuoMainBoard extends MainBoard{
  5.  
  6. public void doSomething() {
  7. System.out.println("this is huasuoMainBoard");
  8. }
  9. }

微星主板

  1. //微星主板
  2. public class WeiXingMainBoard extends MainBoard {
  3.  
  4. public void doSomething() {
  5. System.out.println("this is weixingMainBoard");
  6. }
  7. }

金士顿内存

  1. //金士顿内存
  2. public class JinShiDunMemory extends Memory {
  3.  
  4. public void doSomething() {
  5. System.out.println("this is jinshidunMemory");
  6. }
  7. }

金邦硬盘

  1. //金邦硬盘
  2. public class JinBangMemory extends Memory {
  3.  
  4. public void doSomething() {
  5. System.out.println("this is jinbangMemory");
  6. }
  7. }

西数硬盘

  1. //西数硬盘
  2. public class XiShuHardDisk extends HardDisk {
  3.  
  4. public void doSomething() {
  5. System.out.println("this is xishuHardDisk");
  6. }
  7. }

电脑

  1. /*
  2. * 电脑
  3. */
  4. public class Computer {
  5. private MainBoard mainBoard;
  6. private Memory memory;
  7. private HardDisk harddisk;
  8.  
  9. public MainBoard getMainBoard() {
  10. return mainBoard;
  11. }
  12.  
  13. public void setMainBoard(MainBoard mainBoard) {
  14. this.mainBoard = mainBoard;
  15. }
  16.  
  17. public Memory getMemory() {
  18. return memory;
  19. }
  20.  
  21. public void setMemory(Memory memory) {
  22. this.memory = memory;
  23. }
  24.  
  25. public HardDisk getHarddisk() {
  26. return harddisk;
  27. }
  28.  
  29. public void setHarddisk(HardDisk harddisk) {
  30. this.harddisk = harddisk;
  31. }
  32.  
  33. public void display() {
  34. mainBoard.doSomething();
  35. memory.doSomething();
  36. harddisk.doSomething();
  37. }
  38. }

测试

  1. public class MainClass {
  2. public static void main(String[] args) {
  3. Computer computer = new Computer();
  4. computer.setMainBoard(new HuaSuoMainBoard());
  5. computer.setMemory(new JinShiDunMemory());
  6. computer.setHarddisk(new XiJieHardDisk());
  7.  
  8. computer.display();
  9.  
  10. System.out.println("-------------");
  11.  
  12. computer.setMainBoard(new WeiXingMainBoard());
  13. computer.display();
  14. }
  15. }

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. c# 后台绑定treeview 多个tab

    <wijmo:C1Tabs ID="C1Tab1" runat="server" ><%--OnSelectedChanged="& ...

  2. 3_主流部署方式介绍-Django+gunicorn+nginx

    下载python wgethttps://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz 报错 Cannot find a valid baseurl ...

  3. 本地文件上传GitHub

    (1)mkdir 项目名称(2)cd  项目名称(3)git init 把它变成可管理的Git仓库(4)git status 查看状态(5)git add . 点用空格隔开(6)git status ...

  4. 11 week blog

    Obtaining the JSON: 1.首先,我们将把要检索的JSON的URL存储在变量中. 2.要创建请求,我们需要使用new关键字从XMLHttpRequest构造函数创建一个新的请求对象实例 ...

  5. Linux学习-实验楼(1)

    1.Shell:命令解释器 2.Linux技能树 3.X11:X窗口系统,其本身只是工具包及架构协议,Xorg是x架构规范的一个实现体,是实现了x协议规范的一个提供图形界面的服务器 4.终端本质上是对 ...

  6. redis查看状态信息

    redis查看状态信息 info all|default Info 指定项 server服务器信息 redis_version : Redis 服务器版本 redis_git_sha1 : Git S ...

  7. shell编程学习笔记(七):Shell中将指定内容输出到文件中

    我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...

  8. Android之Wifi学习(1)

    在Android中对Wifi操作,android本身提供了一些实用的包.在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanResult,wifiConfigurat ...

  9. git远程删除分支后,本地git branch -a 依然能看到的解决办法

    http://blog.csdn.net/qq_16885135/article/details/52777871 使用 git branch -a 命令可以查http://blog.csdn.net ...

  10. 修改openssh显示版本号

    问题描述: 漏洞安全对使用的软件扫描漏洞,都是依据软件的版本号探测的,直接升级软件风险太大,因此规避风险,修改软件版本号实现其目的! 问题解决: strings xxx |grep xxx   //实 ...