5迪米特法则
迪米特法则
迪米特法则英文名称是Law of Demeter,简称LoD.
1迪米特法则的定义
迪米特法则又叫最少知识原则(Least Knowledge Principle,LKP),意思是一个对象应当对其他对象尽可能少的了解。迪米特法则最初是用来作为面向对象的系统设计风格的一种法则,在1987年由Lan Holland 在美国东北大学一个叫做迪米特的项目设计提出的,因此叫做迪米特法则。这条法则实际上是很多著名系统,例如火星登陆软件系统、木星的欧罗巴微型轨道飞船的软件系统的指导设计原则。
迪米特法则不同于其他的OO设计原则,它具有很多种表述方式,其中具有代表性的试一下几种表述:
- 只与你直接的朋友们通信(Only talk to your immdiate friends);
- 不要跟"陌生人"说话(Don't talk to strangers)
- 每一个软件单位对其他的单位都只有最少的了解,这些了解仅限于那些与本单位密切相关的软件单位。
按照迪米特法则,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用;如果一个类需要调用另一个类的某一个方法,可以通过第三者转发这个调用。例如,"某人"与一个"朋友"组成自己的朋友圈,两个人都需要与一个圈外的"陌生人"发生相互作用,不符合迪米特法则的类图。
不符合迪米特法则的类图
其实,"某人"没有必要与"陌生人"直接发生互相作用,它可以通过"朋友"简介与“陌生人”发生作用。
符合迪米特法则的类图
2迪米特法则的应用
案例:“某人”、“朋友”、“陌生人”的具体类图。
陌生者:
package com.eric.设计模式原则.迪米特法则的应用;
/**
* @author Eric
* @ProjectName my_design_23
* @description 陌生人类
* @CreateTime 2020-11-23 19:04:33
*/
//陌生者
public class Stranger {
public void strangerMethod(){
System.out.println("这是陌生者方法");
}
}
朋友、中间类
package com.eric.设计模式原则.迪米特法则的应用;
/**
* @author Eric
* @ProjectName my_design_23
* @description 朋友、中间类
* @CreateTime 2020-11-23 19:05:55
*/
//朋友、中间类
public class Friend {
//声明陌生实例
private Stranger stranger = new Stranger();
//访问
public void forward(){
stranger.strangerMethod();
}
//其他方法
public void friendMethod(){
System.out.println("这是朋友的方法。");
}
}
某人
package com.eric.设计模式原则.迪米特法则的应用;
/**
* @author Eric
* @ProjectName my_design_23
* @description 某人类
* @CreateTime 2020-11-23 19:03:21
*/
public class Someone {
//通过Friend间接调用Stranger类中的方法
public void call(Friend friend){
friend.forward();
}
}
测试类
package com.eric.设计模式原则.迪米特法则的应用;
/**
* @author Eric
* @ProjectName my_design_23
* @description 迪米特原则的测试类
* @CreateTime 2020-11-23 19:09:02
*/
public class test {
public static void main(String[] args) {
Someone one = new Someone();
one.call(new Friend());
}
}
通过上述代码可以看到,Someone没有与Stranger类直接联系,而是通过Friend类进行间接访问,这样减少了类之间的关系,减低了类之间的耦合。迪米特法则的核心观念就是类之间的解耦、弱耦合,只有弱耦合了以后,类的复用率才可以提高。
在设计模式中,对迪米特法则进行应用的设计模式有如下两个:
- 外观模式
- 中介者模式
只要你不停下来,慢一点也没关系。