迪米特法则

Posted wq-7047

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迪米特法则相关的知识,希望对你有一定的参考价值。

1定义

迪米特法则又叫做最少知识原则,也就是说,一个对象应当对其他对象尽可能少的了解。不和陌生人说话。英文简写为: LoD。

2来源历史

1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一Booch等普及。后来,因为在经典著作《 The Pragmatic Programmer》而广为人知。

3作用

一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

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

迪米特法则不希望类之间建立直接的联系。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。

4原理与实现

迪米特法则强调了一下两点:

一、从被依赖者的角度来说:只暴露应该暴露的方法或者属性,即在编写相关的类的时候确定方法/属性的权限。

技术图片

//计算机类

public class Computer{

    private void saveCurrentTask(){

        //do something

    }

    private void closeService(){

        //do something

    }

    private void closeScreen(){

        //do something

    }

   

    private void closePower(){

        //do something

    }

   

    public void close(){

        saveCurrentTask();

        closeService();

        closeScreen();

        closePower();

    }

}

 

//人

public class Person{

    private Computer c;

    ...

 

    public  void clickCloseButton(){

       c.close();

    }

}

 

 

二、从依赖者的角度来说,只依赖应该依赖的对象。


技术图片

 

 

//操作系统
public class System{
    private void saveCurrentTask(){
        //do something
    }
    private void closeService(){
        //do something
    }
    private void closeScreen(){
        //do something
    }
    
    private void closePower(){
        //do something
    }
    
    public void close(){
        saveCurrentTask();
        closeService();
        closeScreen();
        closePower();
    }
}
 
//硬件设备容器
public class Container{
    private System mSystem;
    
    public void sendCloseCommand(){
        mSystem.close();
    }
}
 
//人
ublic class Person{
    private Container c;
    ....
    
    public void clickCloseButton(){
       c.sendCloseCommand();
    }
}
 

迪米特法则的核心观念就是类间解耦,弱耦合。只有弱耦合了之后,类的复用才可以提高,类变更的风险才可以减低。

 

 

参考链接:

https://www.cnblogs.com/xiaobai1226/p/8670245.html

https://www.jianshu.com/p/4b244f132439

 

以上是关于迪米特法则的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之美——DRY原则 和 迪米特法则

设计模式之美——DRY原则 和 迪米特法则

面向对象设计原则 迪米特法则(Law of Demeter)

深入浅出设计模式——迪米特法则

设计模式六大原则:迪米特法则

10设计模式六大原则——迪米特法则