迪米特法则

介绍

  • 一个类需要尽量少的对另一个类保持最少了解。(尽量少的调用另一个对象的方法)目的,减少程序之间的耦合度。
  • 简单来说就是:只与 直接朋友 通信

案例

public class Employee {
    private String id;

    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }


    //分公司员工
public class SubEmployee {
    private String id;

    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }

public class SubCompanyManager {

    public List<SubEmployee> getAllEmployee() {

        List<SubEmployee> list = new ArrayList<SubEmployee>();
        for (int i = 0; i < 100; i++) {
            SubEmployee emp = new SubEmployee();
            //为分公司人员按顺序分配一个ID
            emp.setId("分公司" + i);list.add(emp);

        }
        return list;
    }
}

public class CompanyManager {

    public List<Employee> getAllEmployee(){

        List<Employee> list = new ArrayList<Employee>();
        for(int i=0; i<30; i++){
            Employee emp = new Employee();
            //为总公司人员按顺序分配一个ID
            emp.setId("总公司"+i);
            list.add(emp);
        }
        return list;
    }

    /**
     * 所有员工的id
     * @param sub
     */
    public void printAllEmployee(SubCompanyManager sub){
        List<SubEmployee> list1 = sub.getAllEmployee();
        for(SubEmployee e:list1){
            System.out.println(e.getId());
        }
        List<Employee> list2 = this.getAllEmployee();
        for(Employee e:list2){
            System.out.println(e.getId());
        }
    }
}

方法printAllEmployee中调用了

		List<SubEmployee> list1 = sub.getAllEmployee();
        for(SubEmployee e:list1){
            System.out.println(e.getId());
        }
       

这段代码,他不符合迪米特法则。因为SubEmployee不是printAllEmployee类的直接朋友。所以改为

public class Employee {
    private String id;

    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }


    //分公司员工
public class SubEmployee {
    private String id;

    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }




public class SubCompanyManager {

    public List<SubEmployee> getAllEmployee() {
        List<SubEmployee> list = new ArrayList<SubEmployee>();
        for (int i = 0; i < 100; i++) {
            SubEmployee emp = new SubEmployee();
            //为分公司人员按顺序分配一个ID
            emp.setId("分公司" + i);
            list.add(emp);
        }
        return list;
    }

    /**
     * 分公司员工的id
     */
    public void printEmployee() {
        List<SubEmployee> list = this.getAllEmployee();
        for (SubEmployee e : list) {
            System.out.println(e.getId());
        }
    }
}

class CompanyManager{

    public List<Employee> getAllEmployee(){

        List<Employee> list = new ArrayList<Employee>();

        for(int i=0; i<30; i++){

            Employee emp = new Employee();

//为总公司人员按顺序分配一个ID

            emp.setId("总公司"+i);

            list.add(emp);

        }

        return list;

    }


    public void printAllEmployee(SubCompanyManager sub){

        sub.printEmployee();

        List<Employee> list2 = this.getAllEmployee();

        for(Employee e:list2){

            System.out.println(e.getId());

        }

    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值