迪米特法则
定义:如果两个类之间不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法,可以通过第三者转发这个调用。
UML图
设计模式实例
在本例子中,采用学校,班级,以及学生的形式来组成。 首先我们可以分析,学校和学生之间不应该是具有直接的联系。学校应该是由班级组成,然后每个班级里面包含各种各样的学生。那么按照Law of Demeter,可以设计出如下的代码关系:
School Class
public class School{
private String schoolName;
private List<ClassName> classList;
public School(String schoolName) {
this.schoolName = schoolName;
}
public List<ClassName> getClassList() {
return classList;
}
public void setClassList(List<ClassName> classList) {
this.classList = classList;
}
public void print() {
System.out.println("Manage "+this.schoolName);
for (ClassName c:this.classList){
System.out.println(this.schoolName+" manage "+c.getClassId());
}
}
}
Student Class
public class Student{
/**
* 学生由姓名,学号组成
*/
private String id;
private String name;
public Student(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}
ClassName Class
public class ClassName{
private String classId;
private List<Student> studentList;
public ClassName(){}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
public void print() {
for (Student student:this.studentList){
System.out.println(this.classId+" manage "+student.getName());
}
}
}
Client Class
public class ClientA {
public static void main(String[] args) {
/**
* 三个学生归属于两个班级
* */
List<Student> studentList1=new ArrayList<>();
List<Student> studentList2=new ArrayList<>();
Student student1=new Student("1","张三");
Student student2=new Student("11","李四");
Student student3=new Student("22","王五");
studentList1.add(student1);
studentList1.add(student2);
studentList2.add(student3);
/**
* 两个班级归属于学校
* */
List<ClassName> schoolList=new ArrayList<>();
ClassName class1=new ClassName();
class1.setStudentList(studentList1);
class1.setClassId("1");
ClassName class2=new ClassName();
class2.setStudentList(studentList2);
class2.setClassId("2");
schoolList.add(class1);
schoolList.add(class2);
class1.print();
class2.print();
School school=new School("菜鸟学校");
school.setClassList(schoolList);
school.print();
}
}