迪米特法则

来源:互联网 发布:淘宝网黑色双肩包 编辑:程序博客网 时间:2024/05/21 17:55

迪米特法则的定义——如果两个类之间不必直接通信,则这两个类不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法,应该通过第三方来转发这个调用。

迪米特法则也称为最少知识原则(talk only to your immediate friends),就是说一个对象应该尽可能少地了解其他对象。从而降低类之间的耦合,这样做的一个可能后果是系统中存在大量的中介类,这在一定程度上会增加系统的复杂性。

迪米特法则强调的前提是在类的结构设计上,每个类都要尽量降低成员的访问权限,类自己包装好自己的private状态,不需要让别的类知道的字段或者行为就不要公开。                                                                                                                                                                                                                                                                                                 举个例子,古代皇帝召见御前侍卫,需要相关职能机构通知传达圣旨给手下,由手下人去通知侍卫,由认识侍卫的人介绍,然后见到侍卫传递圣旨,这里面就有多次第三方传递的过程,也就是迪米特法则的应用。  

/**  * Author:小青  * Time:2017-8-27   * Function:抽象的陌生人类  *  */public abstract class Stranger{public abstract void operation();}/**  * Author:小青  * Time:2017-8-27   * Function:侍卫  *  */public class Shiwei extends Stranger{@Overridepublic void operation(){System.out.println("见过皇上,我是御前侍卫,我能打十个");}}/**  * Author:小青  * Time:2017-8-27   * Function:太监  *  */public class Taijian{public void operation(){System.out.println("other play");}public void findStranger(){Stranger str = new Shiwei();str.operation();}}/**  * Author:小青  * Time:2017-8-27   * Function:皇帝  *  */public class Huangdi{private Taijian taijian;public Taijian getTaijian(){return taijian;}public void setTaijian(Taijian taijian){this.taijian = taijian;}public void operation(){System.out.println("someone play");}}public class DiMiTeTest{public static void main(String[] args){//声明并实例化皇帝Huangdi kangxi = new Huangdi();//设置一个太监的实例化对象,即找到一个转发者帮忙做事kangxi.setTaijian(new Taijian());//皇帝通过太监传话kangxi.getTaijian().findStranger();} }
迪米特法则的根本思想,是强调类之间需要尽量多的实现松散耦合,类之间耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及,反之会导致很多麻烦。

以上内容,整理自刘径舟,张玉华编著的《设计模式其实很简单》读书笔记,欢迎转载.