00_5面向对象设计原则-迪米特法则

迪米特法则又叫最少知道原则,指一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合。迪米特法则主要强调只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入和输出参数中的类都可以被称为成员朋友类,而出现在方法体内部的类不属于朋友类。
 
我们来给简单设计一个权限系统,TeamLeader需要查看目前发布到线上的课程数量。这时候,TeamLeader要让Employee去进行统计,Employee在把统计结果告诉TeamLeader,下面我们来看一下实现代码:

Course.java
package org.test.design.principle.lod;

public class Course {
}
Employee.java
package org.test.design.principle.lod;

import java.util.List;
public class Employee {
    public void checkNumberOfCourses(List<Course> courseList) {
        System.out.println("目前已发布的课程数量是:" + courseList.size());
    }
}
TeamLeader.java
package org.test.design.principle.lod;

import java.util.ArrayList;
import java.util.List;

public class TeamLeader {
    public void commandCheckNumber(Employee employee) {
        List<Course> courseList = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            courseList.add(new Course());
        }
        employee.checkNumberOfCourses(courseList);
    }

    //测试调佣
    public static void main(String[] args) {
        TeamLeader teamLeader = new TeamLeader();
        Employee employee = new Employee();
        teamLeader.commandCheckNumber(employee);
    }
}
写到这里,功能已经实现了,我们根据迪米特法则来分析一下,TeamLeader只想要结果,不需要跟Course产生直接的交流。而Employee统计需要引用Course对象,TeamLeader和Course并不是朋友。下面我们重构一下代码:
EmployeeV2.java
import java.util.ArrayList;
import java.util.List;

public class EmployeeV2 {
    public void checkNumberOfCourses(){
        List<Course> courseList=new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            courseList.add(new Course());
        }
        System.out.println("目前已发布的课程数量是:"+courseList.size());
    }
}
TeamLeaderV2.java
package org.test.design.principle.lod;

public class TeamLeaderV2 {
    public void commandCheckNumber(EmployeeV2 employee) {
        employee.checkNumberOfCourses();
    }
}

此篇完

posted @ 2021-11-09 21:08  田园码民  阅读(41)  评论(0)    收藏  举报