java 设计模式之迪米特法则

迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP)
问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大
一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的public方法,我就调用这么多,其他的一概不关心


含义:只和朋友交流 ,朋友类的定义是这样的:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类,意思是在一个类中如果出现另一个类,这个类可以定义为成员变量,或者通过形参传递过来,但是不能再方法体中,比如下面的代码就不是按照迪迷特法则来的,'
public class Teacher { 
    public void commond(GroupLeader groupLeader) { 
        List<Girl> listGirls = new ArrayList<Girl>(); 
  
        for (int i = 0; i < 20; i++) { 
            listGirls.add(new Girl()); 
        } 
        groupLeader.countGirls(listGirls); 
    } 
} 

方法是类的一个行为,类竟然不知道自己的行为与其他类产生了依赖关系,这是不允许的
说明:因为Teacher这个类中的方法commond()有业务逻辑在,而引入了Girl这个类,这个就不符合迪米特法则了,它的业务逻辑应该直接放在GroupLeader 中做,我们应该把
   List<Girl> listGirls = new ArrayList<Girl>(); 
  
        for (int i = 0; i < 20; i++) { 
            listGirls.add(new Girl()); 
        } 
这段代码应该封装在GroupLeader 类中内部实现,
public class GroupLeader { 
    private List<Girl> listGirls; 
  
    public GroupLeader(List<Girl> _listGirls) { 
        this.listGirls = _listGirls; 
    } 
  
    public void countGirls() { 
        System.out.println("女生数量是:" + listGirls.size()); 
    } 
} 
这样改完后GroupLeader  提供了countGirds()方法,而不需要关心里面的实现,别人也没法通过改动 把你这块逻辑改掉,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值