ディミトリス原理(デメテルのLoDの法則)は、クラスとクラスの間の結合を最小限に抑えるために、また、少なくとも既知の原則(最小知識の原則、LKP)として知られている他のオブジェクトの最小の理解に維持されるべき物体を指します。ディミトリス原理重点と見知らぬ人に話をしない、唯一の友達と通信します。メンバ変数に表示され、プロセスの入力および出力パラメータは現在、内部アウトメソッド本体は、クラスの友人のカテゴリに属していない、クラスの友人のクラスのメンバを呼び出すことができます。
今すぐアクセス権システムを設計するために、ボスはラインを解放するコース数を確認する必要があります。このとき、ボスは統計、TeamLeader統計結果にTeamLeaderを検索し、ボスを指示します。次はコードを見て:
/**
* @author madongyu
* @projectName design-pattern-ma
* @description: 课程
* @date 2019/6/1717:57
*/
public class Curriculum {
}
/**
* @author madongyu
* @projectName design-pattern-ma
* @description: TODO
* @date 2019/6/1816:21
*/
public class TeamLeader {
public void checkNumberOfCourses(List<Curriculum> courseList){
System.out.println("目前已发布的课程数量是:"+courseList.size());
}
}
public class Boss {
public void commandCheckNumber(TeamLeader teamLeader){
//模拟 Boss 一页一页往下翻页,TeamLeader 实时统计
List<Curriculum> courseList = new ArrayList<Curriculum>();
for (int i= 0; i < 20 ;i ++){
courseList.add(new Curriculum());
}
teamLeader.checkNumberOfCourses(courseList);
}
public static void main(String[] args) {
Boss boss = new Boss();
TeamLeader teamLeader = new TeamLeader();
boss.commandCheckNumber(teamLeader);
}
}
私は実際には、すでにコードは大丈夫に見えますが、機能を実現してきた、あなたへの書き込み。ドミトリー原理によると、ボスはちょうどその結果、カリキュラムとの直接的なコミュニケーションをしたいです。統計TeamLeaderは、カリキュラムのオブジェクトを参照する必要があります。上司やカリキュラムは友人ではなく、以下のクラス図から見ることができます。
コードを改革してみましょう:
TeamLeaderカテゴリ:
public void checkNumberOfCourses(){
List<Curriculum> courseList = new ArrayList<Curriculum>();
for(int i = 0 ;i < 20;i++){
courseList.add(new Curriculum());
}
System.out.println("目前已发布的课程数量是:"+courseList.size());
}
ボスクラス
public void commandCheckNumber(TeamLeader teamLeader){
teamLeader.checkNumberOfCourses();
}
以下のクラス図、ボス、無関係のカリキュラムを考えてみましょう