BOB大叔书中依赖倒置原则:

1.高层模块不应该依赖低层模块,二者都应该依赖于抽象。

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

之所以称之为‘依赖倒置’是相对传统的过程式编程而言,依赖关系结构被倒置了。

public class Business{
    private  FloppyWriter writer  = new FloppyWrite();
    ...
    public void save{
     ...
     Writer.save();
    }
}

此时Business类就依赖于具体的低层模块FloppyWriter ,如果要改变存储介质为usb则必须修改Business。

介于“高层模块不应该依赖低层模块”,程序修改如下:

public interface DeviceWriter{
 void save()
}
class UsbDeviceWrite implements DeviceWriter{
 void save(){
  ...
  //save to usb device;
 }
}
class FloppyDiskWrite implements DeviceWriter{
 void save(){
  ...
  //save to floppy disk device;
 }
}
public class Business{
    private  DeviceWriter writer  = new FloppyWrite();
    public void setDeviceWriter(DeviceWriter dw){
     this.writer = dw;
    }
    ...
    public void save{
     ...
     writer.save();
    }
}

可以看到无论低层的存储如何变化,Business都不要修改。此时就是Business(高层模块)和UsbDeviceWrite 、FloppyDiskWrite(低层模块) 依赖于抽象(DeviceWriter接口)。您也可以编写一个配置管理程序,由xml或.property文件来更改配置,连setDeviceWriter方法都不要写。事实上spring核心容器就提供了这样的配置管理的功能。

ioc spring技术手册学习相关推荐

  1. JXTA技术手册学习--------(1)通告

    通告是JXTA的核心,只有通过寻找通告才能发现JXTA的对等体及其资源,而且只有通过发布通告才能向外界提供自己的服务. 通告由抽象类Advertisement(net.jxta.document.Ad ...

  2. 社群:加入 Spring 技术学习群

    入群须知 为了构建高质量的技术交流社群 减少低质量内容的产出,建议入群前先阅读本须知 了解本社群所涉及的内容主题与相关群规 社群主题:Spring技术 适合人群: 已经具备Java基础能力(若还没有J ...

  3. Spring 2.0技术手册 下载

    Spring 2.0技术手册 作者:林信良 http://dl2.csdn.net/fd.php?i=56063267108000&s=bf67e9e68510f2fa4d9f726495d9 ...

  4. Spring Security技术栈学习笔记(十三)Spring Social集成第三方登录验证开发流程介绍

    开发第三方登录,我们必须首先要了解OAuth协议(本文所讲述的OAuth协议指的是OAuth2协议),本文首先简单介绍OAuth协议,然后基于Spring Social来阐述开发第三方登录需要做哪些准 ...

  5. Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式

    上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...

  6. Spring Security技术栈学习笔记(八)Spring Security的基本运行原理与个性化登录实现

    正如你可能知道的两个应用程序的两个主要区域是"认证"和"授权"(或者访问控制).这两个主要区域是Spring Security的两个目标."认证&qu ...

  7. 2022分享三面阿里:Java 面试核心手册 +Java 电子书 + 技术笔记 + 学习视频

    写在片头:声明,勿杠 首先简单说一下,这三次面试阿里并不是一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为什么还记得面试题,有记录和复盘的习惯,再问就是杠. 个人背 ...

  8. 《撸代码 学习 IOC注入技术1 》—— 布局注入 与 控件注入

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/104539874 [源代码下载地 ...

  9. 《撸代码学习 IOC注入技术2》—— 事件注入

    不诗意的女程序媛不是好厨师~ 转载请注明出处,From李诗雨-https://blog.csdn.net/cjm2484836553/article/details/104581855 源代码下载地址 ...

最新文章

  1. python要在哪里写代码-如何更优雅地写python代码
  2. boost::log模块实现多线程异步日志记录示例
  3. Mysql的垂直分表-新建
  4. plist 文件的读写
  5. C#委托之就是跟委托过不去…
  6. vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?
  7. java android aes加密解密_AES加密解密在JAVA和ANDROID下互通
  8. Python Flask Web 第十一课 —— 使用 Flask-SQLAlchemy 管理数据库
  9. C# 中的 ConfigurationManager类引用方法应用程序配置文件App.config的写法
  10. SpringMVC读取资源文件的几种方式
  11. Wannafly 每日一题 2016-12-26 KAOS 字典树
  12. 鲜花销售管理系统jsp全部代码_基于Java的鲜花销售管理系统设计与实现.zip
  13. 5G+北斗RTK定位:高精度定位技术发展更进一步
  14. 金士顿100 G3U盘写保护无法格式化的解决方法记录
  15. 二叉树期CRR权定价模型-python
  16. 如何重命名c盘中users文件夹下的文件名
  17. 有关微型计算机控制系统的论文,计算机控制系统 徐文尚
  18. SQL server身份验证
  19. mysql 切换主键
  20. python批量添加qq好友_Python QQ批量登录

热门文章

  1. Perforce的环境变量配置
  2. npm命令运行时报错_运行npm update等命令出错后如何分析问题根源(示例代码)
  3. php 二维数组根据键值合并二维数组_php数组实现根据某个键值将相同键值合并生成新二维数组的方法详解...
  4. java代码操作注册表,java操作注册表范例代码
  5. 火狐浏览器的导出和导入
  6. 高速信号传输约翰逊 pdf_智芯文库 | 高速数字电路的设计与仿真
  7. 怎样使用计算机上的高级共享设置,win7打印机共享怎么设置
  8. java telnet 交换机_华为交换机 telnet 配置(极简版)
  9. 软件开发工程师应该具备哪些证书_智能展厅设计应该具备哪些特点?
  10. 经纬度,墨卡托等坐标转换