이 글에서는 데메테르의 법칙을 주로 소개합니다. 데메테르의 법칙은 클래스에서 메소드와 속성을 생성할 때 따라야 할 규칙입니다. 관심 있는 분들은 배우시면 됩니다.
정의: 객체는 다른 객체에 대해 변경되지 않아야 합니다. .
문제의 원인: 클래스 간 관계가 가까울수록 한 클래스가 변경되면 다른 클래스에 미치는 영향도 커집니다.
해결책: 클래스 간의 결합을 최대한 줄이세요.
//总公司员工 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에 있습니다. Dimit의 법칙에 따르면 의사소통은 직접적인 친구하고만 이루어지며 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!