1. 程式人生 > 實用技巧 >設計模式6大原則之【迪米特原則】

設計模式6大原則之【迪米特原則】

迪米特原則定義

一個物件應該對其他物件保持最少的瞭解。又叫最少知道原則

  • 儘量降低類與類之間的耦合
  • 儘量多使用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);
  }

類圖

修改後我們發現,類與類之間的耦合降低了,實現看起來也更加清晰。