迪公尺特法則
基本介紹:
乙個物件應該對其他物件保持最少的了解
類與類關係越密切,耦合度越大
迪公尺特法則又叫最少知道原則,即乙個類對自己依賴的類知道的越少越好。也就是說,對於被依賴的類不管多麼複雜,都盡量將邏輯封裝在類的內部,對外除了提供的public方法,不對外洩露任何資訊
迪公尺特法則還有簡單的定義:只與直接的朋友通訊
直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係我們就說這兩個物件之間時朋友關係。耦合的方式很多,依賴,關聯,組合,聚合等,其中,我們稱出現成員變數,方法引數,方法返回值中的類為直接的朋友,而出現在區域性變數中的類不是直接的朋友。也就是說,陌生的類最好不要以區域性變數的形式出現在類的內部
案例分析:
public
class
demeter1
}// 學校總部員工
class
employee
public string getid()
}// 學院員工
class
collegeemployee
public string getid()
}// 管理學院員工的管理類
// collegeemployee作為了返回值,因此是collegegmanager的朋友
class
collegemanager
return list;}}
// 學校管理類
// employee是schoolmanager的朋友
// collegemanager是schoolmanager的朋友,
// collegeemployee不是schoolmanager的朋友
// 因為他出現在protect的方法中他是乙個私有成員;
class
schoolmanager
return list;
// 依賴collegeemployee與collegemanager和employee
void
printallemployee
(collegemanager sub)
list
list_2 =
this
.getallemployee()
; system.out.
println
("---------學校總部員工----------"
); for
(emplyee e : list_2)}}
}
**改進方案:
前面設計的問題在於schoolmanager中,collegeemployee類並不是schoolmanager類的直接朋友
按照迪公尺特法則,應該避免類種出現這樣非直接朋友關係的耦合
對**按照迪公尺特法則進行改進
改進後**:
public
class
demeter1
}// 學校總部員工
class
employee
public string getid()
}// 學院員工
class
collegeemployee
public string getid()
}// 管理學院員工的管理類
// collegeemployee作為了返回值,因此是collegegmanager的朋友
class
collegemanager
return list;
}// 輸出學院員工的資訊
public
void
printemployee()
}}// 學校管理類
// employee是schoolmanager的朋友
// collegemanager是schoolmanager的朋友,
// collegeemployee不是schoolmanager的朋友
// 因為他出現在protect的方法中他是乙個私有成員;
class
schoolmanager
return list;
// 依賴collegeemployee與collegemanager和employee
void
printallemployee
(collegemanager sub)
*/// 此處使用了迪公尺特法則的改變
sub.
printemployee()
; list
list_2 =
this
.getallemployee()
; system.out.
println
("---------學校總部員工----------"
); for
(emplyee e : list_2)}}
}
其實上述**做了很簡單的一件事,僅僅是將要出現collegeemployee的這段**放入了collegemanager中,保證了要依賴的類對依賴的類知道的越少越好原則;所以我們將他要依賴的類直接放入到collegemanager,collegemanager與collegeemployee是朋友關係,這樣就實現了迪公尺特法則;
如有疑問請及時諮詢.
迪公尺特法則
定義 乙個物件應該對其他物件保持最少的了解。問題由來 類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類的影響也越大。解決方案 盡量降低類與類之間的耦合。自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模...
迪公尺特法則
自從我們接觸程式設計開始,就知道了軟體程式設計的總的原則 低耦合,高內聚。無論是面向過程程式設計還是物件導向程式設計,只有使各個模組之間的耦合盡量的低,才能提高 的復用率。怎麼樣程式設計才能做到低耦合呢?那正是迪公尺特法則要去完成的。類與類之間的關係越密切,耦合度越大,當乙個類發生改變時,對另乙個類...
迪公尺特法則
迪公尺特法則又稱為最少知識法則,即 如果兩個類不必彼此直接通訊,那麼這兩個類就不應該發生直接的相互作用。如果其中乙個類需要呼叫另乙個類的某乙個方法的話,可以通過第三方來 這個呼叫。迪公尺特法則特別強調的是類之間的松耦合,即在類的結構設計上,每乙個類都應該盡量降低成員的訪問許可權。我們在進行程式設計時...