设计模式一共有六大原则:

单一原则、开放封闭原则、接口分离原则、里氏替换原则、最少知识原则、依赖倒置原则。

这篇博客是自己对依赖倒转&里氏代换原则的一些拙见,有何不对欢迎大家指出。

依赖倒转原则

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

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

面向对象编程领域中,依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。「来源于:wiki」

eg:

问题由来:

一个项目的数据库的链接,增删改查等会被复用,所以一般都会将其写成函数,这些函数被称为低层的函数。当我们调用这些函数的时候,高层次的代码就依赖于这些低层的函数。

当我们再次做一个新的项目的时候,发现高层的逻辑都是一样的,仅仅是需要更换数据库的存储。这个时候,因为我们的高层模块依赖于低层的函数,是没办法复用这些模块的。

现在去修改高层的代码会有很大的风险。

解决方案:

设置一个接口或者抽象类,让低层的函数实现其接口,高层的代码通过接口调用低层的函数。这样的如果更换低层函数,只需要让新的低层函数实现其接口,而对于高层的代码改的很少。大大降低了

因为低层函数修改而给高层带来的影响。

而为什么实现接口就不怕更改了那?这个就要涉及到另一个设计模式原则——里氏代换原则了。

里氏代换原则

派生类(子类)对象可以在程式中代替其基类(超类)对象。

一个软件实体如果使用了父类的话,其一定可以适应其子类,它察觉不出父类与子类的差别。

也就是说,在软件里面,把父类都替换成子类,其行为没有发生变化。

实际应用:

正式因为有了里氏代换原则,使继承复用成为了可能。

只有当子类替换父类,软件单元不受影响的情况下,父类才能得到复用。而子类可以在父类的基础上增加新的行为。

eg:

猫是动物,动物拥有吃喝跑叫等行为。如果,我们需要狗,牛等动物拥有这些行为。让狗,牛等继承与动物。只需要更改创建的实例就好了。

UML:(大话设计模式)

总结:

1,需求的变化只需要改变其实例化的对象。

2,有了里氏代换原则才使开放封闭原则成为可能。

(正是由于子类可以替换父类,才使父类再不修改的情况下就可以扩展)

设计模式原则——依赖倒转&里氏代换原则的更多相关文章

  1. 《设计模式》-原则二:里氏代换原则(LSP)

    回顾一下上一节说的“开闭原则” 说的是 一个软件要遵循对修改关闭 对新功能扩展的原则. 这一次来说说 “里氏代换原则” 意思是说:子类型必须能代替他们的基类. 看了半天的例子 好像 是懂非懂啊...相 ...

  2. 3里氏代换原则LSP

    一.什么是里氏代换原则 里氏代换原则(Liskov Substitution Principle): 一个软件实体如果使用的是一个父类的话,那 么一定适用于其子类,而且它察觉不出父类和子 类对象的区别 ...

  3. 设计模式之依赖倒转原则(DIP)

    1.概念 DIP:Dependency Inversion Principle 抽象不应当依赖于细节,细节应当依赖于抽象(说通俗点也就是要针对接口编程,不要针对实现编程:或者要依赖于抽象,不要依赖于具 ...

  4. 设计模式之里氏代换原则(LSP)

    里氏代换原则(Liskov Substitution Principle, LSP) 1 什么是里氏代换原则 里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的O ...

  5. 里氏代换原则(Liskov Substitution Principle,LSP)

    第一种定义: 如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换为o2,程序P的行为没有发生变化,那么类型S是类型T的子类型. 第二种定义: 所有引 ...

  6. 设计模式课程 设计模式精讲 3-10 里氏替换原则coding

    1 代码演练 1.1 继承关系判别(是否是真正意义的继承) 1.2 入参控制 1.3 出参控制 1 代码演练 1.1 继承关系判别(是否是真正意义的继承)(其实我觉得这个例子有点牵强) 1.1.1 反 ...

  7. 【面向对象设计原则】之里氏替换原则(LSP)

    里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing 教授于1994年提出,所以使用的是这位女博士的性命名的一个 ...

  8. 面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)

    里氏代换原则由2008年图灵奖得主.美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出.其严格表述如下:如果对每一个类型为S的 ...

  9. JAVA设计模式之依赖倒转原则

    3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是 ...

随机推荐

  1. python len()函数的用法

    函数:len() 返回字符串.列表.字典.元组等长度. 语法:len(str) str:要计算的字符串.列表.字典.元组等 返回值:字符串.列表.字典.元组等元素的长度. Test: 1:计算字符串的 ...

  2. 洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统

    相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧? 要求: 1.打印出省.市.县等 ...

  3. AspNet mvc的一个bug

    [HttpPost] public ActionResult updateLoan(TuWenMilitaryRank entity) 使用mvc绑定表单 每次绑定的对象都为null,查看Reques ...

  4. 排序算法之选择排序的思想以及Java实现

    1 基本思想 选择排序的思想是,每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 2,算法的实现(Java) package Algorit ...

  5. XSS 漏洞原理及防御方法

    XSS跨站脚本攻击:两种情况.一种通过外部输入然后直接在浏览器端触发,即反射型XSS:还有一种则是先把利用代码保存在数据库或文件中,当web程序读取利用代码并输出在页面上时触发漏洞,即存储型XSS.D ...

  6. February 16th, 2018 Week 7th Friday

    Full of luck, health and cheer. We wish you a Happy Chinese New Year! 春节快乐,万事如意! From Shanbay. Today ...

  7. Java访问级别修饰符

    用途 控制其他类可以访问的字段或方法 修饰符 public.protected.no modifier(未声明).private 访问级别 修饰符 当前类 包 子类 其他包 public √ √ √ ...

  8. python list和tuple

    list列表简介:列表是python的基础数据类型之⼀ ,其他编程语⾔也有类似的数据类型. 比如JS中的数组, java中的数组等等. 它是以[ ]括起来, 每个元素⽤' , '隔开⽽且可以存放各种数 ...

  9. A. On The Way to Lucky Plaza 概率 乘法逆元

    A. On The Way to Lucky Plaza time limit per test 1.0 s memory limit per test 256 MB input standard i ...

  10. pycharm企业版注册码

    pycharm下载最新版 链接:https://pan.baidu.com/s/1gKOCf3PQFc1_2amkMUU1-A 提取码:9pt0 下载企业版: http://www.jetbrains ...