- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式之 ——依赖倒转原则 初识 依赖倒转、控制反转、依赖注入三者含义和目标基本一致,即通过抽象接口解耦和消除依赖关系 依赖倒置的核心思想是依赖于抽象。 1、高层模块不应该依赖低层模块,两者都应该依赖其抽象; 2、抽象不应该依赖细节; 3、细节应该依赖抽象。 ? 高层模块和低层模块:每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。 细节和抽象:在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。 依赖倒置原则在Java语言中的表现就是: 1、模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的; 2、接口或抽象类不依赖于实现类; 3、实现类依赖接口或抽象类。 一句话:面向接口编程 反例: 代码: 司机通过调用奔驰车的run方法开动奔驰车 public class Driver { //司机的主要职责就是驾驶汽车 public void drive(Benz benz){ benz.run(); } } public class Benz { //汽车肯定会跑 public void run(){ System.out.println(奔驰汽车开始运行...); } } 有车,有司机,在Client场景类产生相应的对象 public class Client { public static void main(String[] args) { Driver zhangSan = new Driver(); Benz benz = new Benz(); //张三开奔驰车 zhangSan.drive(benz); } } ? 通过以上的代码,完成了司机开动奔驰车的场景,到目前为止,这个司机开奔驰车的项目没有任何问题。但是业务需求变更永无休止,在发生变更时才能发觉我们的设计或程序是否是松耦合。我们在一段貌似磐石的程序上加上一块小石头:张三司机不仅要开奔驰车,还要开宝马车,又该怎么实现呢?我们先把宝马车产生出来 public class BMW { //宝马车当然也可以开动了 public void run(){ System.out.println(宝马汽车开始运行...); } } 宝马车也产生了,但是我们却没有办法让张三开动起来,为什么?因为张三没有开动宝马车的方法。一个司机竟然只能开奔驰车而不能开宝马车,这也太不合理了!在现实世界都不允许存在这种情况,何况程序还是对现实世界的抽象,我们的设计出现了问题:司机类和奔驰车类之间是一个紧耦合的关系,其导致的结果就是系统的可维护性大大降低,可读性降低,两个相似的类需要阅读两个文件,你乐意吗?还有稳定性,什么是稳定性?固化的、健壮的才是稳定的,这里只是增加了一个车类就需要修改司机类,这不是稳定性,这是易变性。被依赖者的变更竟然让依赖者来承担修改的成本。从这里,我们知道使用抽象才能解决这个问题。 稳定性较高的设计,在周围环境频繁变化的时候,依然可以做到“我自岿然不动”。 ???”减少并行开发引起的风险”,什么是并行开发的风险?并行开发最大的风险就是风险扩散,本来只是一段程序的错误或异常,逐步波及一个功能,一个模块,甚至到最后毁坏了整个项目。一个团队,20人开发,各人负责不同的功能模块,甲负责汽车类的建造,乙负责司机类的建造,在甲没有完成的情况下,乙是不能完全地编写代码的,缺少汽车类,编译器根本就不会让你通过!在缺少Benz类的情况下,Driver类能编译吗?更不要说是单元测试了!在这种不使用依赖倒置原则的环境中,所有的开发工作都是“单线程”的,甲做完,乙再做,然后是丙继续…,这在90年代“个人英雄主义”编程模式中还是比较适用的,一个人完成所有的代码工作,但在现在的大中型项目中已经是完全不能胜任了,一个项目是一个团队的协作结果,一个“英雄”再牛也不可能了解所有的业务和所有的技术,要协作就要并行开发,要并行开发就要解决模块之间的项目依赖关系,那然后呢?依赖倒置原则就隆重出场了! 正例: public interface IDriver { //是司机就应该会驾驶汽车 public void drive(ICar car); } public class Driver implements IDriver{
您可能关注的文档
- 一去二三里教学课件___蓝木菲儿.ppt
- 学习评价的开发.ppt
- 一上品德教案浙教版.doc
- 一生恰如三月花.doc
- 一师一优课_消防安全知识.ppt
- 一维有限深方势阱和势垒贯穿.ppt
- 学习情景7:汽车照明与信号系统的检修.ppt
- 学习情境一 管理认知.ppt
- 学习情境一:公共关系认知.ppt
- 学习写得有文采(定).ppt
- 皖2016S215_预制装配式混凝土排水检查井.pdf
- DB32∕T 4111-2021 预应力混凝土实心方桩基础技术规程.pdf
- DB32T4353_2022_房屋建筑和市政基础设施工程档案资料管理规程.pdf
- 各地汽车生产商名单.doc
- 岳麓版高中历史选修四第1单元第4课“千古一帝”秦始皇(课件2)(共36张).ppt
- Unit8task课件-牛津译林版八年级英语下册.pptx
- 2025年广西壮族自治区高中学业水平合格性考试模拟二历史试题.docx
- 安徽省庐巢联盟2024-2025学年高一下学期段考历史试题(二)(解析版).docx
- 福建省三明市2024-2025学年高二下学期期末质量检测历史试题(解析版).docx
- 2025届山西省高三下学期高考冲刺历史试题.docx
最近下载
- 高中数学课程标准(2024年版).pdf VIP
- 计划生育妇女的护理(共55张PPT)【55页】.pptx VIP
- 消防器材检查记录.docx VIP
- 编译原理 试题及答案.doc VIP
- DB23T 2462—2019灭火救援经济补偿计算标准.docx VIP
- 胃肠道肿瘤患者围术期深静脉血栓预防及管理的证据总结.pptx VIP
- 消防火灾自动报警主机操作规程.pdf VIP
- 山东省潍坊市2025届高三上学期开学调研检测物理试题word版含解析.pdf VIP
- 经鼻高流量氧疗与无创正压通气交替使用在治疗老年重症肺炎合并呼吸衰竭患者中的疗效分析.pdf VIP
- T_PPAC 701-2021 企业商业秘密管理规范.docx
文档评论(0)