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类进行间接访问,这样减少了类之间的关系,减低了类之间的耦合。迪米特法则的核心观念就是类之间的解耦、弱耦合,只有弱耦合了以后,类的复用率才可以提高。
在设计模式中,对迪米特法则进行应用的设计模式有如下两个:
  • 外观模式
  • 中介者模式




只要你不停下来,慢一点也没关系。
原文地址:https://www.cnblogs.com/zyl-0110/p/14027190.html