ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大话设计模式--第五章 依赖倒置原则

2021-06-04 14:58:17  阅读:158  来源: 互联网

标签:父类 企鹅 -- 大话 接口 高层 依赖 模块 设计模式


依赖倒置原则

 

所谓的依赖倒置原则
     A.针对接口编程, 不要针对实现编程
     B.高层模块不应该依赖于底层模块, 两个都应该依赖于抽象


        依赖倒置原则: 原话解释的是, 抽象不应该依赖于细节, 细节应该依赖于抽象. 说白了, 就是上面那句话。针对接口编程, 不要针对实现编程。

        以计算机为例。无论是主板, 还是cpu,内存,硬盘都要针对接口来设计,如果针对实现来设计,内存就要对应到具体的某个主板, 那么, 就会出现内存坏了需要把主板也换了的尴尬。

 

        以前, 我们在开发的时候, 习惯于将某个业务封装成一个方法. 这样达到复用的效果。比如: 我们做项目的时候,大多要访问数据, 所以我们就把访问数据的代码写成一个函数, 每次做新项目是就去调用这些函数。这也就是高层模块依赖底层模块。

        问题也就出现在这里。我们要做新项目了, 发现业务逻辑的高层某块是一样的, 但是客户却希望使用不用的数据库或存储信息的方式。这时就麻烦了。 我们希望能够再次利用这些高层模块. 但是高层模块都是与底层的数据库绑定在一起的。没办法复用这些高层模块,这就非常的糟糕。

  就像刚才说的,PC里如果cpu,内存,硬盘都需要依赖具体的主板, 主板一块,素有的部件就都没用了,这显然不合理。 反过来, 如果内存坏了,也不应该造成其他部件不能用才对。

  如果不管高层模块还是底层模块,他们都依赖于抽象, 具体一点就是接口或者抽象类,只要接口是稳定的,那么任何一个的更改都不用担心其他受到影响。这就是无论高层模块还是低层模块都可以很容易地被复用。这才是最好的办法。

  为什么依赖于接口或者抽象类,就不怕更改呢? 这里就要说另一个原则: 里氏替换原则。

 

里氏替换原则: 子类必须能够替换掉他们的父类.

 


 

  这里要明确一个问题,如果在面向对象设计时, 一个是鸟类, 一个是企鹅类, 如果鸟是可以飞的, 企鹅不会飞,那么企鹅是鸟类么?企鹅可以继承鸟这个类么? 逻辑上来说, 企鹅是鸟类,可以继承鸟类。 可是, 从面向对象的设计来考虑,子类要拥有父类所有的非private的属性和行为。鸟会飞, 企鹅不会飞。尽管生物学分类上, 企鹅是鸟类,但在编程的世界里,企鹅不能以父类-鸟的身份出现,因为前提说所有的鸟都会飞,而企鹅不能飞,所以,企鹅不能继承鸟类。

  只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正的被复用, 而子类也能够在父类的基础上增加新的行为。例如: 猫是继承于动物类的, 以动物的身份拥有吃, 喝, 跑, 叫等行为, 可当有一天, 我们需要狗, 牛, 羊也拥有类似的行为, 由于 他们都是继承于动物, 所以除了更改实例化的地方,程序其他处不需要更改。

  里氏替换原则, 才使得开放-封闭成为可能。也正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。不然, 还谈什么扩展开放,修改关闭呢。

  依赖倒置原则,高层模块不应该依赖低层模块, 两个都应该依赖抽象。

 

标签:父类,企鹅,--,大话,接口,高层,依赖,模块,设计模式
来源: https://blog.51cto.com/u_15091061/2858231

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有