设计模式系列文章:
设计模式 之 设计原则(1) 单一职责原则 接口隔离原则 依赖倒转原则
面向对象 之 不能不知道的类间关系(上)泛化、实现、依赖 C++与Java
面向对象 之 不能不知道的类间关系(下)关联、聚合、组合 C++与Java
JAVA单例模式分析及其实现:饿汉式、懒汉式、双重检查、静态内部类
迪米特法则
迪米特法则,又叫做最少知道原则。
我们先来看一下这个法则的定义:
迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。
如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
读起来朗朗上口,读完后一脸懵逼。单单从这个定义来看确实很难 get 到这个法则的精髓。
那就不妨先来看一下,迪米特法则等另一种更通俗的表述方式:只于直接的朋友通信
直接的朋友指的是在类中的作为成员变量、方法参数或者方法返回值的类。而在方法内部出现的类就不是直接的朋友。换句话说,应该避免在一个方法体中实例化陌生类的成员并使用它的方法。
那么当需要使用到这个陌生类的方法的时候,应该让它以直接的朋友身份出现或者通过直接的朋友调用这个方法。
我们来举一个粟子:
在周朝分封制的背景下,社会等级有着严格的划分,每个阶级只与紧挨着它的上面和下面的阶级产生联系。跨级的管理是不被允许的。引用度娘上找到的的图片:
这样的背景可以很好地体现迪米特法则,让我们从士的角度来看,对于使来说,“直接的朋友”下级 平民,士是不可以直接命令奴隶的。如果一个士希望完成自己土地上庄稼的收割,而收割这个行为只能由奴隶来完成。那么士直接使用奴隶来完成收割是不合理的,违背了迪米特法则。
违背迪米特法则的设计: