趣解设计原则之《我买了宝马,为啥不让我停这?》

7 篇文章 0 订阅
订阅专栏

〇、小故事

我们怎么识别一辆汽车是宝马品牌的汽车呢?虽然宝马汽车车辆型号非常的多,而且外型也各不相同,但是只要是宝马品牌的汽车,它的车头一定会有宝马汽车的logo,那么这个就是大家最直观去确认一辆车是不是宝马牌汽车的主要依据了。

所以,宝马公司就跟各地负责宝马专属停车位的保安和管理人员们说,只允许车头有宝马logo的汽车进入BMW的免费停车场

话说小王同学,她努力工作了一段时间,终于决定在自己的26岁生日时,买了一辆宝马车作为送给自己的礼物

但是,过了一段时间,她的一个小姐妹买了一辆保时捷,她瞬间爱上了保时捷品牌,但是那个车子太贵了,自己根本买不起的,为了圆梦保时捷,她做了一个“大胆”的决定,把车头宝马的logo扣掉换上了保时捷的logo。她看到自己的车子也是保时捷了,心中那种满足感油然而生。

但是,当有一次她要出差去机场,知道飞机场有宝马的免费停车位,她高高兴兴的就开车过去了,但是保安大爷说什么都不让她开进去,虽然她的车子的确是宝马汽车,但是车子的logo却不是宝马的,成为了一辆“四不像”汽车……

一、原则定义

通过上面的例子,我们可以看到小王遇到的问题就是,自己的车标不是宝马车标,所以不符合宝马公司允许停车的标准了。那么,我们可以这样认为:

宝马汽车】是父类,它有一个方法是getLogo(),这个方法会返回BMW
3系、X3、5系、7系……】是子类,继承了父类的getLogo(),调用后也会返回BMW

所以宝马公司就有理由决定,只要调用getLogo()方法且返回“BMW”的车子,都可以被认为是宝马汽车,那么自然而然可以通过这个条件,来限制哪些车辆可以免费停到BMW的专属车位了。而小王自己把方法getLogo()进行了修改,使得这个方法返回了Porsche,造成了原本是宝马车却无法停到BMW专属车位的系统异常

了解了上面的故事,我们来真正的学习一下里式替换,它是什么含义:

LSPLiskov Substitution Principle):子类对象能够替换父类对象,而程序逻辑不变。继承必须确保父类所拥有的性质在子类中仍然成立。也可以理解为:子类可以扩展父类的功能,但不能改变父类原有的功能,建议多用组合,少用继承。

那么,此处也会有同学疑惑,“多用组合,少用继承”这个不应该是合成复用原则吗?如果我们是针对7种设计原则的维度来说,这个是没错的。如果我们针对6种设计模式来说,是不包含合成复用原则的,而“多用组合,少用继承”就被包含在了里式替换中,作为里式替换原理之后的一种编码建议。

二、原则实践

上面的故事和原理相信大家都已经有所了解了,我们还是举一个业务上的小例子,再来加深说明一下违反里式替换后可能会出现的问题。

业务背景:

1】在一个父类Pay中,存在一个通用方法execute(),该方法是用于执行某项通用的业务操作;
2】然后,针对这个父类A我们继承了多个子类,分别是AlibabaPayImplWechatPayImplJDPayImpl……
3】此时呢,我们违反了LSP原则,将JDPayImpl类中的execute()方法进行了自定义,但是对于父类Pay来说,它是不知道的。
4】那么,过了一段时间,公司这边说,需要在execute()方法的业务上加上某些规则校验,那么由于子类都继承了这个方法,所以开发人家就只需要在Pay类的execute()方法上添加这些规则校验,所有的子类就都同时拥有了这种规则校验了。
5】但是,由于JDPayImpl自己实现了父类的execute()方法,所以它没有继承规则校验功能,系统出现了漏洞……

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:1.工厂模式概念
悟纤学院
12-18 1万+
我女朋友愿意和我一起骑着单车,享受着属于我们的时光,每次她那纯真的笑容,让我心情特别的舒畅。 冬天的时候,骑在单车上特别的冷,这时候我特别想让她能坐在宝马里笑。 《工厂模式》让我不在为生产车而烦恼。 这一章我们主要涉及到了设计模式中的两个设计模式:工厂方法模式和抽象工厂模式。之所以放在一起,是因为这个设计模式具有一定的关联性。 一、工厂模式概念 在生活中什么是工厂:又称制造厂,是一类用以生产货物的大型工业建筑物。 在代码中什么是工厂:通过定义一个单独的创建对象的类来创建其它的...
因接外包坐牢456天,我都经历了什么?
程序员闪充宝
10-14 1万+
点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达作者:西畔随云编辑:陶家龙、孙淑娟出处:转载自西畔随云(ID:xipansuiyun),本文当事人西畔随云,观点不代表本号观点。...
软件设计师复习资料
zy139的博客
01-27 1万+
从大禹治水看构件与集成 大禹治水   在远古的尧、舜时代,黄河流域经常发生了大水灾,洪水横流,五谷不收,家破人亡。所以尧派鲧去治水,鲧沿用了过去的传统法子,水来土挡,用土筑堤,堵塞漏洞。但由于洪水凶猛,不断冲击土墙,结果弄得堤毁墙塌,洪水反而闹得更凶了。鲧治水九年,劳民伤财,并没有把洪水制服,是一事无成。 舜接替尧后,就把鲧办罪处死,随后命鲧的儿子禹继续治水。大禹领命之后,寻找到了以前治水失败的教...
史上最全的自动驾驶研究报告(上)
喜欢打酱油的老鸟
05-11 1万+
https://www.jianshu.com/p/b85a982ad4c8 自动驾驶是百年汽车工业史上又一次伟大的范式转移,将重新定义汽车产业规则。汽车的产品定义将不再是 「行走的精密仪器」,也不只是一台「行走的计算机」,而是「行走的第三空间」;车厂的角色将从传统的汽车制造商向移动出行服务商转型。自动驾驶是产业发展的必然趋势,关乎时间、生命,是重塑未来出行生态的关键技术。2018 年下半...
活著就为改变世界---史蒂夫.乔布斯…
此处省略三千字
07-14 1万+
活著就为改变世界史蒂夫乔布斯传美国应该再多1000 个他这样的人物。——《巴伦周刊》《活着就为改变世界:史蒂夫?乔布斯传》他是2010 年《巴伦周刊》全球年度“最受尊敬CEO”;他是计算机界、数字音乐界以及动画电影制作领域的跨界奇才;他是信奉“做每一件事并不是为了赚钱,而是为了要改变世界”的“佛教徒”。 书籍介绍:《活着就为改变世界:史蒂夫?乔布斯传》记录了在富有开创性的数字化商业时代,一位令人羡
展现自己的人生智慧
热门推荐
tiewen的专栏
02-23 5万+
枭将东徙 汉代的刘向为了说明“知己者不怨人”的道理,举了个寓言故事:枭(一种猛禽)遇到鸠(一种水鸟)。鸠问它:“你要去哪里?”枭说:“我要搬到东方去住。”鸠问它为什么,枭说:“这里的人都讨厌我的叫声,所以我要搬到东方去。”鸠说:“那你就改一改你的叫声吧,如果你不改的话,你到了东方,东方的人也会讨厌你的。”   心灵哲思   解决问题要从根本上着手,不要只想到换一个环境,只有彻底改变自身的
禅与摩托车维修艺术
chenzhisi的专栏
10-21 2万+
【作者简介】:     罗伯特·M·波西格(Robert M. Pirsig),1928年生于美国明尼苏达州双子城。15岁进入明尼苏达大学主修化学,后又学习哲学,之后在该校攻读传播学硕士;他曾到印度伯纳雷斯印度大学学习东方哲学,并担任修辞学教授。在追求真理的过程中,因为西方倡导的二元对立与二分法带来的分裂而困扰不已,因而一直试图寻找支离破碎的文化的整合之道,并试图建立自己“metaphysics
程序员因接外包坐牢 456 天!两万字揭露心酸经历
民工哥的博客
10-20 7686
点击上方“民工哥技术之路”选择“星标”每天10点为你分享不一样的干货作者 |西畔随云本文经授权转载自西畔随云(ID:xipansuiyun)发这篇文章的出发点说明...
程序员因接外包坐牢 456 天!两万字长文揭露心酸真实经历
吧主
10-10 9017
点击上方 "程序员小乐"关注公众号,星标或置顶一起成长每天早上8点20分,第一时间与你相约每日英文I'd rather live my life knowing th...
毕业三年 /****************************转载**************HUST机械学长****************************/
xiaot1214的博客
07-28 1万+
写在前面  我QQ里有一个群,名字叫深圳xx公司,这个群一直在那里悄悄的待着,开始还偶尔会有一句问候,一张美女图片,慢慢就啥也没有啦。  突然它闪了起来,我点击打开,一个陌生人在里面问“深圳xx公司怎么样啊?,于是有人开始回答,原来是今年的应届毕业生拿到offer,过来了解公司情况。我猛然想起那个公司,毕业后工作的第一家公司,也慢慢回忆起同一批进去的那些人,还有深圳坪山的那个荒凉的地方,以及那段不长
大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:4.工厂模式之工厂方法模式
悟纤学院
12-21 1万+
上面我们对于BMW520、BMW521都是只有一个工厂来进行生生产,扩展性就会比较差。 由于简单工厂模式中只有一个工厂类来对应这些产品,所以这可能会把我们的上帝累坏了,也累坏了我们这些程序员。 于是工厂方法模式作为救世主出现了。 工厂类定义成了接口,而每新增的车种类型,就增加该车种类型对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码。 简单来说为了解决简单工厂模式中工厂方法过多的if else问题,我们使用了工厂方法模式一个具体产品类由一个...
大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:5.工厂模式之抽象工厂模式
悟纤学院
12-21 1万+
夏天到了,我开着宝马,但是却看不到我女朋友开心的笑容了? 我:宝贝,你这是怎么了?怎么不开心了。 女朋友:你看这大热天的,咱们这个车蒙的慌,虽然你单手开着宝马是很酷,但是我已经热的没心情看你开车了。 我很爱我的女朋友,为了让我的女朋友能够再次开心起来,我就去找宝马公司,让他们给我车安装个空调。 一、工厂模式之抽象工厂模式 1.1 前言 随着客户的要求越来越高,宝马车需要配置空调。于是这个工厂开始生产宝马车和配置需要的空调。 这时候工厂有二个系列...
大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:8.工厂模式总结
悟纤学院
12-21 1万+
这一节我们轻松一下,我们对于前面的简单工厂、工厂方法、抽象工厂做个总结。 一、工厂模式 1.1 定义 简单工厂(Simple Factory):由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(继承自一个父类或接口)的实例。 工厂方法(Factory Method):定义工厂父类指定公共的接口,而子类工厂则负责生成具体的对象(多个工厂)。 抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例.
大话设计模式之爱你一万年:第三章 创建型模式:工厂模式:我想让你坐在宝马里笑:7.工厂模式实战之不同的支付渠道
悟纤学院
12-21 1万+
在实际项目中,我们会引入支付宝支付和微信支付,如果是按照常规的设计我们会这么设计: 设计两个支付类AliPay和WeixinPay,然后在调用的时候,实例化相应的类来进行发起支付,这种方式对于调用者而言,不是很友好,扩展性不强。那么我们就可以使用简单工厂模式或者工厂方法模式进行优化。 这里我们使用简单工厂模式优化一下,工厂方法模式思路和我们上面讲的BMW是一样的。 一、工厂模式实战之不同的支付渠道 1.1 类图 只要了解了简单工厂模式,具体的编码还...
设计模式02-桥接模式(Java)
XYX_888的博客
10-13 595
它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。在使用关联关系是,及在抽象类引入实现类接口时可能会出现不适配的情况,这是可以用适配器类型将其转换成抽象类可以适配的类进行关联。扩展抽象化角色 :是抽象化角色的子类,实现父类中的业务方法, 并通过组合关系调用实现化角色中的业务方法。实现化角色 :定义实现化角色的接口,供扩展抽象化角色调用。抽象化角色 :定义抽象类,并包含一个对实现化对象的引用。具体实现化角色 :给出实现化角色接口的具体实现。实现了对抽象和实现之间的解耦。
Java设计模式梳理:行为型模式(策略,观察者等)
最新发布
helloworld工程师的博客
10-17 1055
行为型模式部分介绍了策略模式、观察者模式、责任链模式、模板方法模式和状态模式,其实,经典的行为型模式还包括备忘录模式、命令模式等,但是它们的使用场景比较有限,而且本文篇幅也挺大了,我就不进行介绍了。学习设计模式的目的是为了让我们的代码更加的优雅、易维护、易扩展。这次整理这篇文章,让我重新审视了一下各个设计模式,对我自己而言收获还是挺大的。我想,文章的最大收益者一般都是作者本人,为了写一篇文章,需要巩固自己的知识,需要寻找各种资料,而且,自己写过的才最容易记住,也算是我给读者的建议吧。(全文完)
Java设计模式
juanmiao的专栏
10-12 724
确保一个类只有一个实例,并提供一个全局访问点。
第九章 UML建模和设计模式
nihao_miai的博客
10-11 852
主要考察面向对象基础知识、面向对象分析与设计、设计模式
适配器设计模式:基础解析与应用实例
weixin_52937170的博客
10-12 521
适配器设计模式的基础实现案例
宝马甲克虫三维设计图纸的ProE模型文件
汽车工业是三维模型设计应用的重要领域之一,从概念草图到最终的汽车成品,三维模型设计提供了精准的可视化支持。这样的模型能够用于空气动力学分析、碰撞测试、制造过程模拟等环节,帮助工程师在实际生产之前对产品...
写文章

热门文章

  • MySQL——数据页 3844
  • ThreadLocal源码解析 3160
  • 多图详解阻塞队列——SynchronousQueue 1870
  • 多线程下HashMap死循环问题源码分析 1531
  • 图解LeetCode——662. 二叉树最大宽度(难度:中等) 1240

分类专栏

  • 设计模式 21篇
  • 设计原则 7篇
  • JVM 3篇
  • 面试题详解 14篇
  • 源码解析 13篇
  • Java 5篇
  • 算法 215篇
  • DDD 4篇
  • MySQL 1篇

最新评论

  • ThreadLocal源码解析

    eyes front457: 是内存泄漏还是内存溢出问题?

  • 趣解设计模式之《会飞的橡皮鸭》

    CSDN-Ada助手: 恭喜你,获得了 2023 博客之星评选的入围资格,请看这个帖子 (https://bbs.csdn.net/topics/617282436?utm_source=blogger_star_comment)。 请在这里提供反馈: https://blogdev.blog.csdn.net/article/details/129986459?utm_source=blogger_star_comment。

  • 多线程下HashMap死循环问题源码分析

    爪哇缪斯: 对的,是死循环。我这边修改一下。多谢指正。

  • 多线程下HashMap死循环问题源码分析

    zyzz592: hashmap不是没有锁吗,怎么会死锁呢

  • 多线程下HashMap死循环问题源码分析

    zyzz592: 死循环是死锁吗,不是吧

最新文章

  • 趣解设计模式之《小王的披萨店续集》
  • 趣解设计模式之《小王的披萨店》
  • 趣解设计模式之《当代毕加索小王》
2023年135篇
2022年150篇
2021年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家江汉商场美陈品牌企业昆明佛山玻璃钢动物雕塑扬州玻璃钢花盆价格青岛玻璃钢雕塑定做佛山三水商场美陈品牌玻璃钢人物雕塑参考价遂宁市玻璃钢雕塑定制楼盘玻璃钢雕塑哪里买江苏人物雕像玻璃钢雕塑无锡拉丝玻璃钢雕塑价格行情合江玻璃钢花盆花器商场的美陈带来的效果意义青岛通用玻璃钢雕塑摆件铜陵佛像玻璃钢雕塑供应商玻璃钢果篮雕塑供应玻璃钢雕塑工艺视频台湾玻璃钢广场雕塑商场2018秋冬美陈布置陕西玻璃钢瓜果雕塑校园玻璃钢雕塑批发玻璃钢雕塑优缺点泰州设计玻璃钢雕塑滁州步行街玻璃钢雕塑优势湛江褐色玻璃钢花盆树脂玻璃钢花盆怎么样手糊玻璃钢花盆图乌海市玻璃钢雕塑公司天津多彩玻璃钢雕塑订做价格抚州公园玻璃钢雕塑供应商双辽玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化