java 设计模式之迪米特法则

来源:互联网 发布:网络福禄克怎么测试 编辑:程序博客网 时间:2024/05/22 08:07
迪米特法则(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()方法,而不需要关心里面的实现,别人也没法通过改动 把你这块逻辑改掉,

0 0
原创粉丝点击