设计模式就该这样学:基于经典框架源码和真实业务场景
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.5 迪米特法则

3.5.1 迪米特法则的定义

迪米特法则(Law of Demeter,LoD)又叫作最少知道原则(Least Knowledge Principle,LKP),指一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合。迪米特法则主要强调只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入和输出参数中的类都可以被称为成员朋友类,而出现在方法体内部的类不属于朋友类。

3.5.2 使用迪米特法则解决实际问题

我们来设计一个权限系统,TeamLeader需要查看目前发布到线上的课程数量。这时候,TeamLeader要让Employee去进行统计,Employee再把统计结果告诉TeamLeader,来看代码。

Course类的代码如下。

img

Employee类的代码如下。

img
img

TeamLeader类的代码如下。

img

客户端测试代码如下,将Employee对象作为参数传送给TeamLeader对象。

img

写到这里,其实功能都已经实现,代码看上去也没什么问题。根据迪米特法则,TeamLeader只想要结果,不需要跟Course产生直接交流。而Employee统计需要引用Course对象,TeamLeader和Course并不是朋友,从如下图所示的类图就可以看出来。

img

下面对代码进行改造。

Employee类的代码如下。

img
img

TeamLeader类的代码如下。

img

再来看如下图所示的类图,Course和TeamLeader已经没有关联了。

img

学习软件设计原则,千万不能形成强迫症。当碰到业务复杂的场景时,需要随机应变。