この記事では主にデメテルの法則を紹介します。デメテルの法則は、クラスでメソッドやプロパティを作成するときに従う必要があるルールです。興味のある方は学習してください。
定義: オブジェクトは一定期間変更されない必要があります。その他のオブジェクト 最低限の理解。
問題の原因: クラス間の関係が緊密であればあるほど、結合度は大きくなり、一方のクラスが変更されると、他方のクラスへの影響も大きくなります。
解決策: クラス間の結合を可能な限り減らします。
//总公司员工 class Employee{ private String id; public void setId(String id){ this.id = id; } public String getId(){ return id; } } //分公司员工 class SubEmployee{ private String id; public void setId(String id){ this.id = id; } public String getId(){ return id; } } 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; } } 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){ 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()); } } } public class Client{ public static void main(String[] args){ CompanyManager e = new CompanyManager(); e.printAllEmployee(new SubCompanyManager()); } }この設計の主な問題は CompanyManager にあります。ディミットの法則によれば、コミュニケーションは直接の友人とのみ行われ、SubEmployee クラスは CompanyManager クラスの直接の友人ではありません (ローカル変数の形式は直属の友人に属さない)、論理的に言えば、本社は支店と結合するだけでよく、支店の従業員とは連絡を取りません。この設計では明らかに不必要な結合が追加されます。デメテルの法則によれば、クラス内での間接的な友人関係とのこのようなカップリングは避けるべきです。変更後のコードは以下の通りです。
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 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()); } } }変更後は支店に社員IDを印刷するメソッドを追加し、本社が直接呼び出して印刷することで支店の従業員との結合を回避します。
以上がJava におけるデメテルの法則の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。