第一部分:设计模式六大原则解读——什么是迪米特法则

迪米特法则(最少知识原则)旨在降低类之间的耦合,通过只与直接朋友交互来提升软件的可维护性和复用性。该原则在代码设计中表现为减少不必要的关联,例如,Teacher类不应直接与Girl类耦合,而应通过班长GroupLeader进行间接交互。遵循这一原则,可以避免因类修改导致的影响扩散,提高系统的健壮性。
摘要由CSDN通过智能技术生成

设计模式六大原则解读——什么是迪米特法则

author:陈镇坤27

创建日期:2022年1月31日


——————————————————————————————

一、迪米特法则(Low of Demeter)

1、迪米特法则的定义

迪米特法则也称最少知识原则(Least Knowledge Principle), 即对自己需要耦合的类保持最低限度的了解原则。

2、迪米特法则的目的

目的在于类间解耦,保证类间的弱耦合关系。一方面可以提高类的复用率,一方面有利于塑造单一构件,方便系统迭代维护。

3、迪米特法则示义1

Only talk to your immediate friends

业务的运转需要对象与对象之间发生必要的耦合,形式各异:组合、聚合、依赖、关联。

迪米特法则要求对象只与“直接的朋友”发生耦合。

下方是示例1

在这里插入图片描述

老师commonds班长去清点女生数量。

在类图示例中,Teacher与Girl产生关联。事实上是业务要求中,教师只有负责commond班长固定去清点学生的功能,因此不需要与Girl发生关联。

按照“朋友原则”可分析Teacher的“朋友类”只有存在于成员方法入参、成员变量上的类,因此在方法体内部实例化Girl的做法违反了“最少朋友”的要求,不论是Teacher或GroupLeader,其健壮性都不强(比如修改countGirls方法,可能需要其调用者)。

改良后如下:

在这里插入图片描述

下方是示例2

在这里插入图片描述

安装软件过程中,遵循第一步确定后,再执行第二步,以此类推,在代码中的UML类图体现如上所示。

在InstallSofware类中,调用其朋友类,进行了上述的判断。

问题在于,根据迪米特法则——最少知识原则的要求,InstallSoftware应该保持对Wizrd最低限度的了解,事实上可以将第一步、第二步,乃至到第三步的判断逻辑封装到Wizard中,InstallSoftware调用封装好的方法即可。否则,当Wizard类中方法产生修改时,将会连带影响到期调用者所在的类——InstallSoftware。

4、建议

遵循迪米特原则,可以从以下几个方面入手:

尽量只与朋友类发生关联;

设计类方法时,尽量考虑是否能减少public方法——越多的public意味着产生越多不必要关联的可能。

PS(书中介绍的一个bug场景):额外注意Serializable(远程调用的对象实现Serializable后,在服务的另一端被实例化时,若类的字段名、类的访问修饰符不一致,则会实例化失败)

5、总结

迪米特法则的核心是解耦。就好像机械零件与零件之间,越少的耦合,便使得整个系统具备更强的健壮性——当某个零件需要更迭或替换时,产生的影响最小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈镇坤27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值