設計模式之迪米特原則

迪米特原則(Law of Demeter , LoD)是指一個對象應該對其它對象保持最少的瞭解,又叫最少知道原則(Least Knowledge Principle,LKP),儘量降低類與類之間的耦合度。迪米特原則主要強度,只和朋友交流,不和陌生人說話。出現在成員變量、方法的輸入、輸出參數中的類都可以稱爲成員朋友類,而出現在方法內部的類不屬於朋友類。
1.比如說,現在有一個權限系統,Boss需要查看目前發佈到線上的課程數量。此時,Boss 要找到 TeamLeader 去進行統計,TeamLeader 把統計結果告訴Boss. 上代碼:
Course 類
public class Course{}

TeamLeader 類
public class TeamLeader{
    public void checkNumberOfCourses(List<Course> courseList){
        System.out.println("目前已發佈的課程量: "+ courseList.size());
    }
}

Boss 類
public class Boss{
    public void commandCheckNumber(TeamLeader teamLeader){
        //模擬Boss一頁一頁的往下翻,TeamLeader 實時統計
        List<Course> courseList = new ArrayList<course>();
        for(int i = 0 ; i < 20; i++){
            courseList.add(new Course());
        }
        teamLeader.checkNumberOfCourses(courseList);
    }
}

2.測試一下

public static void main(String [] args){
    Boss boss = new Boss();
    TeamLeader teamLeader = new TeamLeader ();
    boss.commandCheckNumber(teamLeader);
}
根據迪米特原則,從上面代碼可以看出,Boss 類既用了 TeamLeader 類,又用了 Course 類,但是 Boss 類是不需要直接與 Course 類進行交流的,只有TeamLeader 類在進行統計時需要引用 Course 對象。

3.來改造以下代碼
TeamLeader 類
public class TeamLeader{
    public void checkNumberOfCourses(){
        List<Course> courseList = new ArrayList<course>();
        for(int i = 0 ; i < 20; i++){
            courseList.add(new Course());
        }
        System.out.println("目前已發佈的課程量: "+ courseList.size());
    }
}

Boss 類
public class Boss{
    public void commandCheckNumber(TeamLeader teamLeader){
        teamLeader.checkNumberOfCourses();
    }
}

通過改造之後的代碼,我們可以看出 Boss 只需要引用 TeamLeader  的對象就行,並且避免與 Course 類的耦合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章