設計模式之迪米特法則

迪米特法則(Law of Demeter,簡稱LoD) 低耦合,一個對象應該對其餘對象保持最少的瞭解(中介者模式就是這個的應用)編程

  • 核心思想: 類間解耦。
  • 通俗來說: 一個類對本身依賴的類知道的越少越好。自從咱們接觸編程開始,就知道了軟件編程的總的原則:低耦合,高內聚。不管是面向過程編程仍是面向對象編程,只有使各個模塊之間的耦合儘可能的低,才能提升代碼的複用率。低耦合的優勢不言而喻,可是怎麼樣編程才能作到低耦合呢?那正是迪米特法則要去完成的。

錯誤示範:this

public class Teacher {
    public void command(){
        //耦合了student類
        List<Student> students = new ArrayList<Student>();
        for(int i=0; i<20; i++){
            students.add(new Student());
        }
        
        //耦合了studentleader類
        StudentLeader leader = new StudentLeader();
        System.out.println("清點人數完畢,總共有:"+leader.counts(students)+"人");
        
    }
}

public class Student {

}

//班幹部負責清點人數
public class StudentLeader {
    public int counts(List<Student> lists){
        return lists.size();
    }
}

public class Client{
    public static void main(String[] args){
        System.out.println("週末收假,學校領導命令老師去點名.....");
        Teacher teacher = new Teacher();
        teacher.command();
    }
}

 

 

正確示範:spa

public class LODTeacher {
    //僅僅耦合了LODStudentLeader類
    public void command(LODStudentLeader leader){
        System.out.println("清點人數完畢,總共有:"+leader.counts()+"人");
    }
}

public class LODStudentLeader {
    //僅僅耦合了student類
    private List<Student> students;
    
    public LODStudentLeader(List<Student> students){
        this.students = students;
    }
    public int counts(){
        return students.size();
    }
}

public class TaskTest {
    public static void main(String[] args) {
        System.out.println("週末收假,學校領導命令老師去點名.....");
        List<Student> students = new ArrayList<Student>();
        for(int i = 0; i < 20; i++ ){
              students.add(new Student());
        }
        LODTeacher teacher = new LODTeacher();
        teacher.command(new LODStudentLeader(students));
    }
}
相關文章
相關標籤/搜索