zoukankan      html  css  js  c++  java
  • 依赖倒转原则

    依赖倒转原则

       抽象不应该依赖细节,细节应该依赖抽象

       通俗的解释,以计算机系统为例,就是要针对接口编程,不要对实现编程,无论主板、CPU、内存、硬件都是在针对接口设计的,如果针对实现来设计,内存就要对应到针对某个品牌的主板,那么会出现换内存需要把主板也换掉的尴尬。(内存的引脚、主板的插槽都是标准接口的概念,具体内部的实现由具体厂商来实现)

       高层模块不应该依赖底层模块,两个都应该依赖于抽象

       抽象不应该依赖于细节,细节应该依赖抽象

       为什么要倒转?

          原因:面向过程的开发时,为了使常用代码可以复用,一般都会把这些常用代码写成许多函数的程序库,这样我们在做新项目的时候,去调用这些底层的函数就可以 了,比如,我们做的项目大多需要访问数据库,所以就把访问数据库的代码写成了函数,这也叫做高层模块依赖底层模块,但问题也就出在这里,我们要做新的项 目,发现业务逻辑的高层模块都是一样的,但客户端希望使用不同的数据库或存储信息方式,这时就出现麻烦了,我们希望能够再次使用这些高层模块,但发现这些 高层模块都是与底层的访问数据库绑定在一起的,没有办法复用这些高层模块,这样显然不合理,而如果不管高层模块还是底层模块都是依赖于抽象,具体一点就是 接口或抽象类,只要接口是稳定的,那么任何一个的更改都不会影响到其它方面,这就使得无论是高层模块还是底层模块都可以很容易的被复用,这才是最好的办 法。

      为什么依赖了接口或抽象类,就不怕更改?

          里氏代换原则(LSP):子类型必须能够替换掉它们的父类型

          由于子类型的可替换性才使得使用父类型的模块在无需修改的情况下就可以扩展

    依赖倒转原则可以说是面向对象程序设计的标志,用哪种语言来编写程序并不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象设计,反之就是过程化设计

  • 相关阅读:
    [.Net MVC] 使用 log4net 日志框架
    322作业
    uva 12171 sculpture (超级好题)——yhx
    NOIP2007 T2纪念品分组 解题报告-S.B.S.
    NOIP2007 T1奖学金 解题报告-S.B.S.
    NOIP2012普及组 (四年后的)解题报告 -SilverN
    calc 多项式计算 (STL版和非STL版) -SilverN
    uva 10562 undraw the trees(烂题) ——yhx
    uva 10129 play on words——yhx
    uva 10305 ordering tasks(超级烂题)——yhx
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5057451.html
Copyright © 2011-2022 走看看