自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則:低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模組之間的耦合盡量的低,才能提高**的復用率。怎麼樣程式設計才能做到低耦合呢?那正是迪公尺特法則要去完成的。
類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類的影響也越大。
盡量降低類與類之間的耦合。
如果兩個類不必彼此直接通訊,那麼這兩個類就不應當發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三者**這個呼叫。
有乙個集團公司,下屬單位有分公司和直屬部門,現在要求列印出所有下屬單位的員工id。
先來看一下違反迪公尺特法則的設計:
現在這個設計的主要問題出在companymanager中,根據迪公尺特法則,只與直接的朋友發生通訊,而subemployee類並不是companymanager類的直接朋友(以區域性變數出現的耦合不屬於直接朋友),從邏輯上講總公司只與他的分公司耦合就行了,與分公司的員工並沒有任何聯絡,這樣設計顯然是增加了不必要的耦合。按照迪公尺特法則,應該避免類中出現這樣非直接朋友關係的耦合。修改後的**如下://總公司員工
class employee
public string getid()
}//分公司員工
class subemployee
public string getid()
}class subcompanymanager
return list; }}
class companymanager
return list; }
public void printallemployee(subcompanymanager sub)
listlist2 = this.getallemployee();
for(employee e:list2)
}}public class client
}
class subcompanymanager
return list;
} public void printemployee()
}}class companymanager
return list; }
public void printallemployee(subcompanymanager sub)
}}
修改後,為分公司增加了列印人員id的方法,總公司直接呼叫來列印,從而避免了與分公司的員工發生耦合。
迪公尺特法則
定義 乙個物件應該對其他物件保持最少的了解。問題由來 類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類的影響也越大。解決方案 盡量降低類與類之間的耦合。自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模...
迪公尺特法則
迪公尺特法則又稱為最少知識法則,即 如果兩個類不必彼此直接通訊,那麼這兩個類就不應該發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三方來 這個呼叫。迪公尺特法則特別強調的是類之間的松耦合,即在類的結構設計上,每乙個類都應該盡量降低成員的訪問許可權。我們在進行程式設計時...
迪公尺特法則
定義 乙個物件應該對其他物件保持最少的了解。問題由來 類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類的影響也越大。解決方案 盡量降低類與類之間的耦合。自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模...