美文网首页
设计原则(5) : 迪米特法则

设计原则(5) : 迪米特法则

作者: a_salt_fish | 来源:发表于2019-01-13 19:20 被阅读0次

一个对象应该对其他对象保持最少的了解(又叫最少知道原则)


  • 强调只和朋友交流,不和陌生人说话.表现为对外部引入的类最少最好,目的是为了降低程序之间的耦合

朋友指出现在成员变量, 方法的输入输出参数的类称为朋友类, 方法体中出现的类不是朋友类


老板发布任务给主管,主管接收任务下发给员工完成任务.
Boss

public class Boss {
    public void plan(Manager manager, String plan){
        Employ employ = new Employ();
        manager.releaseTask(employ, plan);
    }
}

主管

public class Manager {
    public void releaseTask(Employ employ, String plan) {
        employ.work(plan);
    }
}

员工

public class Employ {
    public void work(String plan) {
        System.out.println("employ do " + plan);
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Boss boss = new Boss();
        Manager manager = new Manager();
        boss.plan(manager, "5万亿");
    }
}

run , 没问题 一个5万亿的项目完成了,但是我们看一下Boss类, 这个类中我们创建了一个员工,然后由主管给该员工发布任务, 但在实际生活中, 老板是完全不用关心员工的, 老板只需要对主管发布任务即可, 跟员工沟通是主管的事情. 这明显违背了迪米特法则,因为我们在Boss类中import进了一个Boss完全不关心的员工类.


改进一下, 第二版,我们只需修改Boss 和 Manager类
Boss类只需要让管理员知道任务

public class Boss2 {
    public void plan(Manager2 manager, String plan){
        manager.releaseTask(plan);
    }
}

主管负责找人完成任务

public class Manager2 {
    public void releaseTask(String plan) {
        Employ employ = new Employ();
        employ.work(plan);
    }
}

再次运行

public class Test2 {
    public static void main(String[] args) {
        Boss2 boss = new Boss2();
        Manager2 manager = new Manager2();
        boss.plan(manager, "5万亿");
    }
}

完成!


迪米特法则的初衷是降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系。

但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个“中介”来发生联系,例如本例中,总公司就是通过分公司这个“中介”来与分公司的员工发生联系的。

过分的使用迪米特原则,会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。

github源码

相关文章

  • [Code Design] 六大设计原则之`迪米特法则`

    六大设计原则之迪米特法则 定义 迪米特法则(Law of Demeter)又叫作最少知识原则(Least Know...

  • 迪米特法则

    个人博客原文:迪米特法则 设计模式六大原则之五:迪米特法则。 简介 姓名:迪米特法则 英文名:Law of Dem...

  • 迪米特法则

    迪米特法则 迪米特法则定义 迪米特法则(Law Of Demeter, LoD) 也成为最少知识原则(Least ...

  • [5+1]开闭原则(一)

    [5+1]开闭原则(一) 前言 面向对象的SOLID设计原则,外加一个迪米特法则,就是我们常说的5+1设计原则。 ...

  • [5+1]开闭原则(二)

    [5+1]开闭原则(二) 前言 面向对象的SOLID设计原则,外加一个迪米特法则,就是我们常说的5+1设计原则。 ...

  • 迪米特法则

    迪米特法则 迪米特法则的定义 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least K...

  • [5+1]里氏替换原则(一)

    [5+1]里氏替换原则(一) 前言 面向对象的SOLID设计原则,外加一个迪米特法则,就是我们常说的5+1设计原则...

  • 设计模式学习之迪米特法则

    迪米特法则(LOD) 迪米特法则(Law of Demeter)又叫作最少知识原则(The Least Knowl...

  • 设计原则(5) : 迪米特法则

    一个对象应该对其他对象保持最少的了解(又叫最少知道原则) 强调只和朋友交流,不和陌生人说话.表现为对外部引入的类最...

  • 面向对象设计的六大基本原则

    面向对象设计的六大基本原则: 1)开闭原则 2)里氏代换原则 3)依赖倒转原则 4)接口隔离原则 5)迪米特法则 ...

网友评论

      本文标题:设计原则(5) : 迪米特法则

      本文链接:https://www.haomeiwen.com/subject/dhjldqtx.html