迪米特法则(LOD):
要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则。

意义: 迪米特法则的意义在于降低类之间的耦合。由于每个对象尽量减少对其他对象的了解,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

狭义的迪米特法则:
  如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一类的某一个方法的话,可以通过第三者转发这个调用。
  
如何做到一个对象应该对其他对象有最少的了解呢?

只和直接的朋友交流:出现在成员变量、方法的输入输出参数中的类就是直接的朋友。
减少对朋友的了解:尽量减少一个类对外暴露的方法。

案例:
使用迪米特法则

明星与经纪人的关系实例

明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。

类图

java迪米特原则 迪米特法则举例_迪米特法则

明星类

/**
 * @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();//和媒体公司洽谈业务
    }
}

测试结果

java迪米特原则 迪米特法则举例_java迪米特原则_02

解释说明

这里经纪人负责与明星商量,与粉丝,媒体接触,然后才是明星与粉丝见面,与媒体公司会谈。明星尽量少的与粉丝,与媒体公司接触,这里就体现到了迪米特法则。

结束!!!!!!!


和她在一起我肯定很幸福啊,可她和我在一起她就不一定了。