设计模式之迪米特法则

一、定义

        迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP),其定义是:一个对象应该对其它对象有最少的了解。
        通俗的讲就是一个类应该对自己需要耦合或调用的类知道的最少,被耦合或调用的类的内部是如何复杂都与我没有关系。

二、只和直接朋友交流

        迪米特法则还有一个解释是:Only talk to your immediate friends(至于直接的朋友通信)。那么什么是直接的朋友呢?
        每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就称其为朋友关系。而直接朋友指的是出现在类的成员变量方法参数方法返回值中的类或对象,而出现在局部的变量的中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。
示例如下:

public class A {
   
    //不符合迪米特法则
    public void showBInfo1(){
        B b=new B();
        System.out.println("姓名:"+b.getName());
    }
    //符合迪米特法则
    public void showBInfo2(B b){
        b.showInfo();
    }
}

public class B {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void showInfo(){
        System.out.println("姓名:"+this.getName());
    }
}

        上面在A类的showInfo1()方法中,使用了局部变量B,方法是类的一个行为,类竟然不知道自己的行为与其它类之间产生了依赖关系,这是绝对不允许的,因此违背了迪米特法则。而在showInfo2()方法中,B类作为参数传入方法中,是A类的直接朋友。

三、注意事项

  1. 迪米特法则的核心是降低类之间的耦合;
  2. 需要注意的是:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)的耦合关系,并不是要求完全没有依赖关系。
  3. 一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。因此在设计时需要反复权衡,是否可以减少public方法或属性。
  4. 如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,那就放置在本类中。
  5. 类与类之间的关系是建立在类间的,而不是方法间,因此一个方法尽量不引入一个类中不存在的对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值