Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >趣解设计模式之《只是买台咖啡机,竟要我去学习咖啡器的运行原理?》

趣解设计模式之《只是买台咖啡机,竟要我去学习咖啡器的运行原理?》

作者头像
爪哇缪斯
发布于 2023-10-06 04:39:27
发布于 2023-10-06 04:39:27
1930
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

〇、小故事

小王最近工作特别的忙,每天要早出晚归,睡眠质量很差,为了可以精力充沛的投入到每天的工作中,她都在上班路上买一杯公司楼下的星巴克咖啡来提提神。咖啡味道很好,但是每天买咖啡的人真的是太多了,本来上班的路上就已经很疲劳了,还要在店门口排半天的队,她觉得这种情况需要改变一下了。

那么既然早上要喝杯咖啡来提提神,何不自己买台咖啡机呢?早上起来,吃完早饭,喝杯自己做的咖啡,岂不美哉!于是乎,她就从网上买了一台咖啡机,她找了半天说明书,结果就找到一个客服电话,她打电话过去咨询为什么没有说明书?客户妹妹说,不需要说明书的,您可以参加我们的免费培训课程,一共20节课,我们会从原理上给您讲解咖啡机是工作原理的!

什么!我只是买台咖啡机,竟然要学习咖啡器的运行原理?”你们公司莫不是疯了吧。挂掉电话后,小王就把这款咖啡机退掉了……(虚拟故事,莫要当真~)

一、原则定义

通过上面的故事,大家肯定也会觉得非常的荒谬。我买一台咖啡机,你就告诉我怎么使用就可以了呗!干嘛要我去学习你们咖啡机的工作原理呢!那难道我买一台汽车,我还要学习汽车工作原理吗!

所以,在日常生活中,迪米特法则就已经融入到我们的生活中了。那么,到底什么是迪米特法则呢?我们来看一下它的定义:

LoDLaw of Demeter):也称为最少知识原则。描述的是:一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂,那是你的事儿,和我没关系,我就知道你提供的这么多方法,我就调用这么多,其他的我一概不关系。

那么,还是以买咖啡机为例,我们买了一款咖啡机,只需要根据说明书,知道怎么制作一杯香浓的咖啡即可,其他的我就不关注了。这也就是日常生活中的迪米特法则/最少知识原则

而在我们开发的时候,也需要遵循这个设计原则。比如我们常常在开发过程中,需要调用其他研发团队的接口,来实现某种业务逻辑,我们以支付为例。作为我们使用方,只需要对方提供一个支付接口,调用后返回支付成功或支付失败&失败原因即可。如果对方开发人员给了你2,3个接口,让你按照某些支付流程去调用,这显然就违背了迪米特法则了。你应该立刻针对其中的不合理性进行讨论,而不是听之任之。

二、原则实践

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

业务背景:

当一个微信用户要在我们系统操作业务逻辑的时候,我们的需求是: 【1】如果微信用户没有注册我们系统的话,我们默认的调用注册接口去注册它,注册成功后,把用户信息返回给业务系统; 【2】如果她已经注册了,即已经存在于我们的用户表,则把用户信息返回给业务系统,再通过它的用户信息,进行下一步业务操作。 那么针对于这个需求,我们其实应该是希望负责用户信息的研发团队,给我们提供一个接口,即:获得用户信息的接口。而不应该提供用户信息查询接口,用户信息注册接口,甚至底层还涉及到其他安全性接口,由我们一步一步的去调用,这样就违反了迪米特法则了。

以上做法类似DDD里面领域划分的概念。是我域负责的业务我负责,不是我域的业务,由相关领域负责即可。

往期推荐

知道CountDownLatch是做什么的,那你知道它的底层是如何实现的吗?

从《离婚律师》中学习代理模式

网红小王购车记(建造者模式)

看个电影就能学会类的加载过程?我不信!

(二)Kafka系列:“光说不干假把式!”,环境咱先搭上

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-02 10:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式总结
  在学习设计模式的过程中,实践需与理论相结合才能更好地举一反三,灵活运用。设计模式到底是什么?它是对整个软件系统的拆分,组装,并决定模块间关系以及如何互动、通信的某种模式。究其本质,设计模式就是以语言特性(面向对象三大特性)为硬件基础,再加持六大设计原则的灵魂组合而总结出的一系列套路,本篇要讲地就是灵魂。
Kevin_Zhang
2019/03/20
3900
设计模式(九)外观模式Facade(结构型)
在遇到以下情况使用facade模式: 1) 当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。 这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。facade可以提供一个简单的缺省视图, 这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过facade层。 2) 客户程序与抽象类的实现部分之间存在着很大的依赖性。引入 facade将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性 和可移植性。 3) 当你需要构建一个层次结构的子系统时,使用 facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过facade进行通讯,从而简化了它们之间的依赖关系。
黄规速
2022/04/14
3960
设计模式(九)外观模式Facade(结构型)
设计模式六大原则(五)----迪米特法则
迪米特法则(Law of Demeter )又叫做最少知识原则,也就是说,一个对象应当对其他对象尽可能少的了解。不和陌生人说话。英文简写为: LoD。
用户7798898
2021/06/17
8.1K1
我用过的设计模式(1)-- 本门心法
如果要理解为:一个类只有一个职责,当然也是可以的,简单化嘛。 单一职责的原话解释是这样的:There should never be more than one reason for a class to change. 什么意思?那里,应该,没有,多于,一个,原因,使得,类,去,改变。 啊,咱这蹩脚英语,勉强能翻译啊。
看、未来
2021/09/18
3190
趣解设计模式之《为什么租房子要找中介?》
小王大学毕业了,打算来北京闯荡一下,于是就先寄宿到了他的表姐家,白天的时候,自己在外面小区转一转,看看能不能找到可以租到的房子,他找了好几天都没有找到合适的,要么就是小区里一张租房子的广告都没有,好不容易找到几个,里面的房间大小和价格又不合适。北京实在是太大了,而且这边人生地不熟的,找房子真的是耗费了他大量的力气。
爪哇缪斯
2023/10/06
1750
趣解设计模式之《为什么租房子要找中介?》
给大家简简单单介绍一下设计模式
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴,又到了一年一度最佳找工作的时节,你拿到心仪的offer了吗?基于大多数粉丝的要求,让小编写整理一些面
Java学术趴
2022/05/19
3530
给大家简简单单介绍一下设计模式
趣解设计模式之《办理入职这么难吗?》
小王大学毕业,经过大学期间的刻苦学习,终于成功的面试上了一家公司。按照约定的时间,小王兴高采烈的来到公司前台去办理入职手续。
爪哇缪斯
2023/09/26
1490
趣解设计模式之《办理入职这么难吗?》
我用过的设计模式(1)-- 本门心法
单一职责的原话解释是这样的:There should never be more than one reason for a class to change.
看、未来
2021/02/24
3220
面试官:设计原则有哪些?什么是里式替换原则?
RBAC:基于角色的访问控制(Role-Based Access Control)
爪哇缪斯
2023/05/10
2440
面试官:设计原则有哪些?什么是里式替换原则?
七大原则+23种设计模式
编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,复用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的
devi
2021/08/18
3.3K0
趣解设计模式之《为什么租房子要找中介?》
小王大学毕业了,打算来北京闯荡一下,于是就先寄宿到了他的表姐家,白天的时候,自己在外面小区转一转,看看能不能找到可以租到的房子,他找了好几天都没有找到合适的,要么就是小区里一张租房子的广告都没有,好不容易找到几个,里面的房间大小和价格又不合适。北京实在是太大了,而且这边人生地不熟的,找房子真的是耗费了他大量的力气。
爪哇缪斯
2023/09/12
1940
趣解设计模式之《为什么租房子要找中介?》
学会这10个设计原则,离架构师又进了一步!!!
一个懂设计原则的程序猿,写出来的代码可扩展性就是强,后续的人看代码如沐春风。相反,如果代码写的跟流水账似的,完全一根筋平铺下来,后续无论换谁接手维护都要骂娘。
麦洛
2021/07/05
2960
学会这10个设计原则,离架构师又进了一步!!!
「设计模式 JavaScript 描述」模板方法模式
在 JavaScript 开发中用到继承的场景其实并不是很多,但这不代表继承在 JavaScript 里没有用武之地,虽然没有真正的类和继承机制,但我们可以通过原型 prototype 来变相地实现继承。
用户8921923
2022/10/24
2890
设计模式的六大原则
设计模式的学习,可以增强自己的代码复用意识。同时,也可以清晰地表达自己的编程思路。本文将介绍设计模式的六大原则:
sunsky
2022/05/11
4270
设计模式的六大原则
设计模式六大原则
  单一职责原则又称为单一功能原则,即不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
那一叶随风
2018/08/22
2890
设计模式六大原则
一文聊透软件设计模式这件事儿
在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念,四位作者合称 GOF(全拼 Gang of Four),简称四人帮!
Java极客技术
2022/12/04
2260
Gof23设计模式趣味详解(三分钟上手系列)
学习设计模式可以提高程序员的思维能力、编程能力和设计能力,从而使你写的代码可重用性更高、可读性更强、可靠性更高、灵活性更好、可维护性更强
bboy枫亭
2020/09/22
4050
没错,这就是面向对象编程(设计模式)需要遵循的 6 个基本原则
在讨论面向对象编程和模式(具体一点来说,设计模式)的时候,我们需要一些标准来对设计的好还进行判断,或者说应该遵循怎样的原则和指导方针。
柳公子
2018/09/17
8130
设计模式之六大基本原则
开闭原则指导我们,当软件需要变化时,应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。这里的“应该尽量”4个字说明OCP原则并不是说绝对不可以修改原始类的,当有这种修改的需求时,应该尽早地重构,而不是通过继承等方式添加新的实现,这会导致类型的膨胀以及历史遗留代码的冗余
是阿超
2021/12/30
3630
设计模式---外观模式
引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度。
大忽悠爱学习
2021/11/15
3030
相关推荐
设计模式总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档