專欄介紹
專欄地址
專欄介紹
主要對(duì)目前市面上常見的23種設(shè)計(jì)模式進(jìn)行逐一分析和總結(jié),希望有興趣的小伙伴們可以看一下,會(huì)持續(xù)更新的。希望各位可以監(jiān)督我,我們一起學(xué)習(xí)進(jìn)步,加油,各位。
迪米特法則
迪米特法則(Law of Demeter)也被稱為最少知識(shí)原則(Least Knowledge Principle),是一種面向?qū)ο笤O(shè)計(jì)的原則,它強(qiáng)調(diào)一個(gè)對(duì)象應(yīng)該盡量減少與其他對(duì)象之間的相互依賴。
核心思想
盡量減少對(duì)象之間的相互依賴,使對(duì)象之間的耦合度降低。具體來說,它強(qiáng)調(diào)一個(gè)對(duì)象應(yīng)該只與其直接的朋友進(jìn)行交互,而不與陌生的對(duì)象進(jìn)行直接交互。
這里的“朋友”指
當(dāng)前對(duì)象本身
一個(gè)對(duì)象可以調(diào)用自身的方法,因?yàn)樗鼘?duì)自身的結(jié)構(gòu)和行為是了解的。
以參數(shù)形式傳入當(dāng)前對(duì)象的對(duì)象
一個(gè)對(duì)象可以調(diào)用作為參數(shù)傳入的對(duì)象的方法,因?yàn)樗鼘?duì)傳入的對(duì)象的結(jié)構(gòu)和行為是了解的。
當(dāng)前對(duì)象的成員變量直接引用的對(duì)象
一個(gè)對(duì)象可以調(diào)用它的成員變量直接引用的對(duì)象的方法,因?yàn)樗鼘?duì)成員變量引用的對(duì)象的結(jié)構(gòu)和行為是了解的。
目標(biāo)
降低對(duì)象之間的耦合度,提高系統(tǒng)的可維護(hù)性、可擴(kuò)展性和可復(fù)用性。通過限制對(duì)象之間的直接交互,減少了對(duì)象之間的依賴關(guān)系,使系統(tǒng)更加靈活、易于修改和測試。
遵循迪米特法則可以使系統(tǒng)的設(shè)計(jì)更加模塊化,每個(gè)對(duì)象只需要關(guān)注自身的職責(zé),而不需要了解其他對(duì)象的內(nèi)部細(xì)節(jié)。這樣可以降低系統(tǒng)的復(fù)雜性,提高代碼的可讀性和可維護(hù)性。同時(shí),迪米特法則也有助于提高系統(tǒng)的可擴(kuò)展性,因?yàn)闇p少了對(duì)象之間的直接依賴,新增功能時(shí)只需要修改少量的對(duì)象即可。
Java程序?qū)崿F(xiàn)
// 定義一個(gè)學(xué)生類
class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
// 定義一個(gè)班級(jí)類
class Class {
private String className;
private List<Student> students;
public Class(String className, List<Student> students) {
this.className = className;
this.students = students;
}
public String getClassName() {
return className;
}
public List<Student> getStudents() {
return students;
}
}
// 定義一個(gè)學(xué)校類
class School {
private String schoolName;
private List<Class> classes;
public School(String schoolName, List<Class> classes) {
this.schoolName = schoolName;
this.classes = classes;
}
public String getSchoolName() {
return schoolName;
}
public List<Class> getClasses() {
return classes;
}
}
// 客戶端代碼
public class Main {
public static void main(String[] args) {
// 創(chuàng)建學(xué)生對(duì)象
Student student1 = new Student("Tom");
Student student2 = new Student("Jerry");
// 創(chuàng)建班級(jí)對(duì)象
List<Student> students = new ArrayList<>();
students.add(student1);
students.add(student2);
Class class1 = new Class("Class1", students);
// 創(chuàng)建學(xué)校對(duì)象
List<Class> classes = new ArrayList<>();
classes.add(class1);
School school = new School("School1", classes);
// 輸出學(xué)校的名稱和班級(jí)的名稱
System.out.println("School Name: " + school.getSchoolName());
for (Class c : school.getClasses()) {
System.out.println("Class Name: " + c.getClassName());
}
// 輸出班級(jí)中的學(xué)生姓名
for (Class c : school.getClasses()) {
for (Student s : c.getStudents()) {
System.out.println("Student Name: " + s.getName());
}
}
}
}
程序分析
學(xué)生類、班級(jí)類和學(xué)校類之間的關(guān)系是符合迪米特法則的。學(xué)生類只與班級(jí)類有直接的關(guān)聯(lián),班級(jí)類只與學(xué)校類有直接的關(guān)聯(lián),而學(xué)生類和學(xué)校類之間沒有直接的關(guān)聯(lián)。這樣可以降低對(duì)象之間的耦合度,提高系統(tǒng)的靈活性和可維護(hù)性。
在客戶端代碼中,我們創(chuàng)建了一個(gè)學(xué)校對(duì)象,然后通過學(xué)校對(duì)象獲取班級(jí)對(duì)象和學(xué)生對(duì)象,并輸出它們的信息。通過迪米特法則,我們可以看到客戶端代碼只需要與學(xué)校類進(jìn)行交互,而不需要了解班級(jí)類和學(xué)生類的內(nèi)部細(xì)節(jié),這樣可以降低客戶端代碼與其他類的直接依賴,使系統(tǒng)更加靈活和易于維護(hù)。文章來源:http://www.zghlxwxcb.cn/news/detail-723715.html
總結(jié)
迪米特法則強(qiáng)調(diào)了對(duì)象之間的松耦合設(shè)計(jì),通過減少對(duì)象之間的直接依賴,提高系統(tǒng)的靈活性和可維護(hù)性。遵循迪米特法則可以使系統(tǒng)更加模塊化、可擴(kuò)展和易于測試。文章來源地址http://www.zghlxwxcb.cn/news/detail-723715.html
到了這里,關(guān)于小談設(shè)計(jì)模式(12)—迪米特法則的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!