据野史传说中记载,当年宋哲宗最宠爱的妃子是刘德妃。刘德妃虽然深受皇上宠爱,但是却久久不能生育。刘德妃为竞争皇后之位,提高自己的身价,便想出了“借腹怀孕”的诡计。她打算利用身旁的一个长得有些姿色的姓李的侍女,引诱宋真宗上钩。一次在刘德妃沐浴之时,真宗果真临幸了这个李姓侍女,不久这个侍女就怀孕了,这使刘德妃也装作怀孕的样子,其实侍女怀孕是真,刘德妃只是安排计策假装而已。等到十月分娩的时候,“两个”龙种先后呱呱落地。刘德妃采取了狸猫换太子的卑劣手段,让真宗将李姓侍女打入冷宫,可是自己却如愿以偿地登上了梦寐以求的皇后宝座。

放在今天,刘德妃一定是面向对象的高手。她深谙“里氏替换原则”:
- 先创建“父类”– 孕妇,孕妇有两大特征:怀孕、生娃。
- 然后创建两个孕妇的实例:刘德妃和李姓侍女。
- 最后在运行时,用自己替换了真正的孕妇李侍女,成功欺骗了皇上。

之所以能够在运行时动态替换,是因为刘德妃的行为里完全继承了孕妇的特征。

最后给出 里氏替换原则的定义:

里氏替换,LSP(Liskov Substitution Principle),所有引用基类的地方必须能够透明地使用其子类的对象。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何异常。
我们知道面向对象语言的三大特征是继承、封装、多态,里氏替换原则就是依赖于继承、多态,建立抽象,通过抽象建立规范,在运行时替换成具体的对象,保证系统的扩展性、灵活性。
往往和开放封闭原则不离不弃。

设计模式代码地址点这里

设计模式六大原则: 狸猫换太子 -- 里氏替换原则相关推荐

  1. python里氏替换原则_设计模式六大原则之里氏替换原则

    这是设计模式6 大原则系列的第二篇文章,附上前一篇文章地址:设计模式六大原则之单一职责原则.本文主要讲解设计模式的里氏替换原则. 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其 ...

  2. 《设计模式》杂记之里氏替换原则

    在这篇博文中,我想把自己学习过的里氏替换原则一些好知识点分享给大家.首先我想把继承的一下优缺点给大家分享一下,然后再引出里氏替换原则吧!<?xml:namespace prefix = o ns ...

  3. 软件设计原则之里氏替换原则、依赖倒置原则

    系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.里氏替换原则 什么是里氏 ...

  4. 七大设计原则之里氏替换原则应用

    目录 1 里氏替换原则 2 里氏替换原则应用 1 里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)是指如果对每一个类型为 T1 的对象 o1,都有类型为 ...

  5. 6大设计原则之里氏替换原则

    面对对象中的继承 优点如下: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性 提高代码的重用性 子类可以形如父类,但又异于父类 提高代码的可扩展性,很多开源框架的扩展接口都是通过继承父类 ...

  6. 开闭原则与里氏替换原则

    1.开闭原则 是面向对象设计的基本原则之一,是"可复用设计"的基础,它的主要原则是:对扩展开放,对修改关闭:意思就是我们改变一个软件时.应该通过扩展方式来改变软件,而不是修改原有的 ...

  7. 深入理解开闭原则、里氏替换原则

    开闭原则(Open-Closed Principle)里氏替换原则 开闭原则(Open-Closed Principle) What 什么是开闭原则? Why 为什么要使用开闭原则和When 什么时候 ...

  8. 设计模式六大原则之里氏替换原则、依赖倒置原则详解

    设计模式六大原则--里氏替换原则.依赖倒置原则详解 1.里氏代换原则(Liskov Substitution Principle) 概念 顾名思义,该原则用于经常发生替换的地方,在Java中指的是实现 ...

  9. java solid设计原则_六大设计原则之里氏替换原则(LSP)

    一.SOLID 设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substit ...

最新文章

  1. 阿里程序员连续两次绩效3.25!大老板威胁要开除他!还不给赔偿金!问大家该如何维权?...
  2. 基于人工智能和物联网的“智能护理
  3. 一个简单的tcpserver
  4. java 消息机制 ActiveMQ入门实例
  5. 自制割接(平滑过滤)实验大全
  6. 【ACL2019】看 NLP 未来发展趋势
  7. android开发中的grid控制
  8. java虚拟机是什么?
  9. 《零秒工作》的一些总结
  10. Android 读取assets文件中的文件
  11. c语言中的三角函数公式,高中三角函数公式大全-必背基础知识点.doc
  12. 关于应用RestHighLevelClient操作ElasticSearch出现“远程主机强迫关闭一个现有连接”的问题探究
  13. 不同介质中的运动目标检测(虚拟潜望镜)
  14. 记录一下Python的11个小技巧
  15. 设计模式 — 抽象工厂模式
  16. webpack基础配置
  17. 校园网连接后,浏览器打不开登录界面可能的一种解决方法
  18. 视频压缩编码算法与原理
  19. diskgenius如何在Linux运行,diskgenius怎么用
  20. YouTube多语种视频营销,低成本也能带来高收益

热门文章

  1. metal slug java_【进化史】合金弹头进化史 Metal Slug Games (1996-2020)
  2. 【编程游戏】贺岁放礼花。(点燃续帖1-194楼lshdic的焰火)
  3. 大数据演进简史:从数仓到数据中台,谈技术选型最优解
  4. VS安装及其注意事项
  5. 推荐一个基于PHP的局域网课程点播系统
  6. 计算机一级b教程execl,计算机一级bexcel上机操作练习题-1.xls
  7. linux运维笔记:Rsync数据同步工具
  8. 【笔记】2022.5.11 网页前端
  9. alter用法(增加表字段)
  10. 如何在win10系统上使用WIN7的经典输入法切换方式