迪米特法则(LOD):
要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则。
意义: 迪米特法则的意义在于降低类之间的耦合。由于每个对象尽量减少对其他对象的了解,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。
狭义的迪米特法则:
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一类的某一个方法的话,可以通过第三者转发这个调用。
如何做到一个对象应该对其他对象有最少的了解呢?
只和直接的朋友交流:出现在成员变量、方法的输入输出参数中的类就是直接的朋友。
减少对朋友的了解:尽量减少一个类对外暴露的方法。
案例:
使用迪米特法则
明星与经纪人的关系实例
明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。
类图
明星类
/**
* @Description: 明星类
*/
public class Star {
private String name;
public Star(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
粉丝类
/**
* @Description: 粉丝类
*/
public class Fans {
private String name;
public String getName() {
return name;
}
public Fans(String name) {
this.name = name;
}
}
媒体公司类
/**
* @Description: 媒体公司类
*/
public class Company {
private String name;
public String getName() {
return name;
}
public Company(String name) {
this.name = name;
}
}
经纪人类(负责与粉丝,媒体公司接触)
/**
* @Description: 经纪人类
*/
public class Agent {
private Star star;
private Fans fans;
private Company company;
public void setStar(Star star) {
this.star = star;
}
public void setFans(Fans fans) {
this.fans = fans;
}
public void setCompany(Company company) {
this.company = company;
}
//和粉丝见面的方法
public void meeting() {
System.out.println(star.getName() + "和粉丝" + fans.getName() + "见面");
}
//和媒体公司洽谈的方法
public void business() {
System.out.println(star.getName() + "和" + company.getName() + "洽谈");
}
}
测试类
/**
*测试类
*/
public class Client {
public static void main(String[] args) {
//创建经纪人类
Agent agent = new Agent();
//创建明星对象
Star star = new Star("林青霞");
agent.setStar(star);
//创建粉丝对象
Fans fans = new Fans("李四");
agent.setFans(fans);
//创建媒体公司对象
Company company = new Company("黑马媒体公司");
agent.setCompany(company);
agent.meeting();//和粉丝见面
agent.business();//和媒体公司洽谈业务
}
}
测试结果
解释说明
这里经纪人负责与明星商量,与粉丝,媒体接触,然后才是明星与粉丝见面,与媒体公司会谈。明星尽量少的与粉丝,与媒体公司接触,这里就体现到了迪米特法则。
结束!!!!!!!
和她在一起我肯定很幸福啊,可她和我在一起她就不一定了。