设计模式六大原则: 狸猫换太子 -- 里氏替换原则
据野史传说中记载,当年宋哲宗最宠爱的妃子是刘德妃。刘德妃虽然深受皇上宠爱,但是却久久不能生育。刘德妃为竞争皇后之位,提高自己的身价,便想出了“借腹怀孕”的诡计。她打算利用身旁的一个长得有些姿色的姓李的侍女,引诱宋真宗上钩。一次在刘德妃沐浴之时,真宗果真临幸了这个李姓侍女,不久这个侍女就怀孕了,这使刘德妃也装作怀孕的样子,其实侍女怀孕是真,刘德妃只是安排计策假装而已。等到十月分娩的时候,“两个”龙种先后呱呱落地。刘德妃采取了狸猫换太子的卑劣手段,让真宗将李姓侍女打入冷宫,可是自己却如愿以偿地登上了梦寐以求的皇后宝座。
放在今天,刘德妃一定是面向对象的高手。她深谙“里氏替换原则”:
- 先创建“父类”– 孕妇,孕妇有两大特征:怀孕、生娃。
- 然后创建两个孕妇的实例:刘德妃和李姓侍女。
- 最后在运行时,用自己替换了真正的孕妇李侍女,成功欺骗了皇上。
之所以能够在运行时动态替换,是因为刘德妃的行为里完全继承了孕妇的特征。
最后给出 里氏替换原则的定义:
里氏替换,LSP(Liskov Substitution Principle),所有引用基类的地方必须能够透明地使用其子类的对象。通俗点讲,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何异常。
我们知道面向对象语言的三大特征是继承、封装、多态,里氏替换原则就是依赖于继承、多态,建立抽象,通过抽象建立规范,在运行时替换成具体的对象,保证系统的扩展性、灵活性。
往往和开放封闭原则不离不弃。
设计模式代码地址点这里
设计模式六大原则: 狸猫换太子 -- 里氏替换原则相关推荐
- python里氏替换原则_设计模式六大原则之里氏替换原则
这是设计模式6 大原则系列的第二篇文章,附上前一篇文章地址:设计模式六大原则之单一职责原则.本文主要讲解设计模式的里氏替换原则. 肯定有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑.其 ...
- 《设计模式》杂记之里氏替换原则
在这篇博文中,我想把自己学习过的里氏替换原则一些好知识点分享给大家.首先我想把继承的一下优缺点给大家分享一下,然后再引出里氏替换原则吧!<?xml:namespace prefix = o ns ...
- 软件设计原则之里氏替换原则、依赖倒置原则
系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.里氏替换原则 什么是里氏 ...
- 七大设计原则之里氏替换原则应用
目录 1 里氏替换原则 2 里氏替换原则应用 1 里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)是指如果对每一个类型为 T1 的对象 o1,都有类型为 ...
- 6大设计原则之里氏替换原则
面对对象中的继承 优点如下: 代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性 提高代码的重用性 子类可以形如父类,但又异于父类 提高代码的可扩展性,很多开源框架的扩展接口都是通过继承父类 ...
- 开闭原则与里氏替换原则
1.开闭原则 是面向对象设计的基本原则之一,是"可复用设计"的基础,它的主要原则是:对扩展开放,对修改关闭:意思就是我们改变一个软件时.应该通过扩展方式来改变软件,而不是修改原有的 ...
- 深入理解开闭原则、里氏替换原则
开闭原则(Open-Closed Principle)里氏替换原则 开闭原则(Open-Closed Principle) What 什么是开闭原则? Why 为什么要使用开闭原则和When 什么时候 ...
- 设计模式六大原则之里氏替换原则、依赖倒置原则详解
设计模式六大原则--里氏替换原则.依赖倒置原则详解 1.里氏代换原则(Liskov Substitution Principle) 概念 顾名思义,该原则用于经常发生替换的地方,在Java中指的是实现 ...
- java solid设计原则_六大设计原则之里氏替换原则(LSP)
一.SOLID 设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substit ...
最新文章
- 阿里程序员连续两次绩效3.25!大老板威胁要开除他!还不给赔偿金!问大家该如何维权?...
- 基于人工智能和物联网的“智能护理
- 一个简单的tcpserver
- java 消息机制 ActiveMQ入门实例
- 自制割接(平滑过滤)实验大全
- 【ACL2019】看 NLP 未来发展趋势
- android开发中的grid控制
- java虚拟机是什么?
- 《零秒工作》的一些总结
- Android 读取assets文件中的文件
- c语言中的三角函数公式,高中三角函数公式大全-必背基础知识点.doc
- 关于应用RestHighLevelClient操作ElasticSearch出现“远程主机强迫关闭一个现有连接”的问题探究
- 不同介质中的运动目标检测(虚拟潜望镜)
- 记录一下Python的11个小技巧
- 设计模式 — 抽象工厂模式
- webpack基础配置
- 校园网连接后,浏览器打不开登录界面可能的一种解决方法
- 视频压缩编码算法与原理
- diskgenius如何在Linux运行,diskgenius怎么用
- YouTube多语种视频营销,低成本也能带来高收益
热门文章
- metal slug java_【进化史】合金弹头进化史 Metal Slug Games (1996-2020)
- 【编程游戏】贺岁放礼花。(点燃续帖1-194楼lshdic的焰火)
- 大数据演进简史:从数仓到数据中台,谈技术选型最优解
- VS安装及其注意事项
- 推荐一个基于PHP的局域网课程点播系统
- 计算机一级b教程execl,计算机一级bexcel上机操作练习题-1.xls
- linux运维笔记:Rsync数据同步工具
- 【笔记】2022.5.11 网页前端
- alter用法(增加表字段)
- 如何在win10系统上使用WIN7的经典输入法切换方式