迪米特法则(Demeter Principle,DP)
原创大约 2 分钟
迪米特法则(Demeter Principle,DP)是由美国东北大学在1987
年提出的。
它的核心思想是:一个实体对象应当尽可能少地与其他实体发生交互
。
也就是说,如果类A
与类C
无关,那么最好不要直接调用类C
中的方法method()
。
如果实在是需要它的方法,那么也最好引入中间类类B
来实现间接调用。
这样解释是在讲废话,举个例子就明白了。
package com.itechthink.designrule.demeter;
/**
* 国家人口统计局
*
*/
public class National {
public int statistics() {
int beijing = Beijing.statistics();
int shanghai = Shanghai.statistics();
// 中间省略30多个省 ......
int taiwan = Taiwan.statistics();
return beijing + shanghai + ... + taiwan;
}
}
/**
* 北京人口统计局
*
*/
public class Beijing {
public int statistics() {
// 返回北京市人口统计数量
return count;
}
}
/**
* 上海人口统计局
*
*/
public class Shanghai {
public int statistics() {
// 返回上海市人口统计数量
return count;
}
}
// 中间省略若干省
/**
* 台湾人口统计局
*
*/
public class Taiwan {
public int statistics() {
// 返回台湾省人口统计数量
return count;
}
}
如果每次做人口统计都由国家统计局亲自过问每一个省的人口统计结果,再自己来汇总的话,会相当麻烦。而且国家统计局也不是只统计人口,还有很多数据需要统计,如果每个都这么干,非加班到死不可。
但又确实需要人口统计数据,怎么办呢?
引入一个中间层——人口统计司
就行了。
package com.itechthink.designrule.demeter;
/**
* 国家人口统计局
*
*/
public class National {
public int statistics(Agent agent) {
// 直接从人口统计司拿数据,再也不用事必躬亲
return agent.statistics();
}
}
/**
* 迪米特法则也称最小化原则,即一个类作为调用方,应当对被自己调用的类所处理的逻辑细节知道的越少越好
* 或者当两个类之间直接通信的时候,会造成高度依赖的后果(高耦合)
* 解决此问题的办法是尽量避免两个类直接接触(低耦合),而是通过一个中间人做转发
*
*/
public class Agent {
public int statistics() {
// 返回所有地方的人口统计数量
return count;
}
}
这样各司其职就轻松多了。
感谢支持
更多内容,请移步《超级个体》。