介绍
- 一个类需要尽量少的对另一个类保持最少了解。(尽量少的调用另一个对象的方法)目的,减少程序之间的耦合度。
- 简单来说就是:只与 直接朋友 通信
案例
public class Employee {
private String id;
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
//分公司员工
public class SubEmployee {
private String id;
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public 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 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;
}
/**
* 所有员工的id
* @param sub
*/
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());
}
}
}
方法printAllEmployee中调用了
List<SubEmployee> list1 = sub.getAllEmployee();
for(SubEmployee e:list1){
System.out.println(e.getId());
}
这段代码,他不符合迪米特法则。因为SubEmployee不是printAllEmployee类的直接朋友。所以改为
public class Employee {
private String id;
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
//分公司员工
public class SubEmployee {
private String id;
public void setId(String id){
this.id = id;
}
public String getId(){
return id;
}
public 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;
}
/**
* 分公司员工的id
*/
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());
}
}
}