設計模式6大原則之【迪米特原則】
阿新 • • 發佈:2020-09-20
迪米特原則定義
一個物件應該對其他物件保持最少的瞭解。又叫最少知道原則
- 儘量降低類與類之間的耦合
- 儘量多使用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);
}
類圖
修改後我們發現,類與類之間的耦合降低了,實現看起來也更加清晰。