迪米特原则定义
一个对象应该对其他对象保持最少的了解。又叫最少知道原则
- 尽量降低类与类之间的耦合
- 尽量多使用private,少用public方法
迪米特原则优点
- 降低类与类之间的耦合,提高了模块的相对独立性
- 由于亲合度降低,从而提高了类的可复用率和系统的扩展性
迪米特原则实现
一个反例
老板(Boss)想让经理(Manager)查询一下单位的员工(Employee)数量有多少
针对这个需求,有以下代码:
员工类:
public class Employee {
}
经理类:
public class Manager {
public int getEmployeeCount(List<Employee> employeeList){
return employeeList.size();
}
}
老板类:
public class Boss {
public int getEmployeeCount(Manager manager){
List<Employee> employeeList = new ArrayList<Employee>();
//假设这里是在数据库查询的
for (int i = 0; i < 10; i++) {
employeeList.add(new Employee());
}
return manager.getEmployeeCount(employeeList);
}
}
测试类:
public static void main(String[] args) {
Boss boss = new Boss();
Manager manager=new Manager();
int count= boss.getEmployeeCount(manager);
System.out.println("员工数量是:"+count);
}
运行上述测试,返回10没有问题
类图
我们发现,测试的类依赖了老板和经理类,老板类又依赖了员工类,但其实我们知道老板是不需要依赖员工的,测试也可以不依赖经理类的,以上做法类与类之间的依赖看起来很混乱
最佳实现
我们重新调整依赖关系
经理类:
public class Manager {
public int getEmployeeCount(){
List<Employee> employeeList = new ArrayList<Employee>();
//假设这里是在数据库查询的
for (int i = 0; i < 10; i++) {
employeeList.add(new Employee());
}
return employeeList.size();
}
}
老板类:
public class Boss {
public int getEmployeeCount(){
Manager manager = new Manager();
return manager.getEmployeeCount();
}
}
测试类:
public static void main(String[] args) {
Boss boss = new Boss();
int count= boss.getEmployeeCount();
System.out.println("员工数量是:"+count);
}
类图
修改后我们发现,类与类之间的耦合降低了,实现看起来也更加清晰。