demeterprinciple
1. 乙個物件應該對其他物件保持最少的了解
2. 類與類關係越密切,耦合度越大
3. 迪公尺特法則demeterprinciple又叫最少知道原則,即乙個類對自己依賴的類知道的越少越好.也就是說,對於被依賴的類不管多麼複雜,都盡量將邏輯封裝在類的內部.對外除了提供的public方法,不對外洩露任何資訊
4. 迪公尺特法則還有個更簡單的定義:只與直接的朋友通訊
直接的朋友:每個物件都會與其他物件有耦合關係,只要兩個物件之間有耦合關係,我們就說這兩個物件之間是朋友關係。
耦合的方式很多,依賴,關聯,組合,聚合等。其中,我們稱出現成員變數,方法引數,方法返回值中的類為直接的朋友,而出現在區域性變數中的類不是直接的朋友。也就是說,陌生的類最好不要以區域性變數的形式出現類的內部。
有乙個學校,下屬有各個學院和總部,現在要求列印出學校總部員工id和學院員工id
//客戶端
public
class
demeterprinciple
}//學校總部員工類
class
employee
public
void
setid
(string id)
}//學院員工類
class
collegeemployee
public
void
setid
(string id)
}//管理學院員工的管理類
class
collegemanager
return list;}}
//分析schoolmanager類的直接朋友類有哪些?employee、collegemanager
//collegeemployee不是直接朋友而是乙個陌生類,這樣違背了迪公尺特法則
//學校管理類
class
schoolmanager
return list;
}//該方法完成輸出學校總部和學院員工資訊(id)
void
printallemployee
(collegemanager sub)
//獲取到學校總部員工
list
list2=
this
.getallemployee()
; system.out.
println
("--------學校總部員工--------");
for(employe ee : list2)
}}
----------學校員工----------
學院id=0
學院id=1
學院id=2
學院id=3
學院id=4
學院id=5
學院id=6
學院id=7
學院id=8
學院id=9
--------學校總部員工--------
學校總部員工id=0
學校總部員工id=1
學校總部員工id=2
學校總部員工id=3
學校總部員工id=4
1)前面設計的問題在於schoolmanager中,collegeemployee類並不是schoolmanager類的直接朋友(分析)
2)按照迪公尺特法則,應該避免類**現這樣非直接朋友關係的耦合
3)對**按照迪公尺特法則進行改進
//客戶端
public
class
demeterprinciple2
}//學校總部員工類
class
employee
public
void
setid
(string id)
}//學院員工類
class
collegeemployee
public
void
setid
(string id)
}//管理學院員工的管理類
class
collegemanager
return list;
}//輸出學院員工資訊
publicvoidprintemployee()
}}//學校管理類
class
schoolmanager
return list;
}//該方法完成輸出學校總部和學院員工資訊(id)
void
printallemployee
(collegemanagersub)
}}
----------學院員工----------
學院id=0
學院id=1
學院id=2
學院id=3
學院id=4
學院id=5
學院id=6
學院id=7
學院id=8
學院id=9
--------學校總部員工--------
學校總部員工id=0
學校總部員工id=1
學校總部員工id=2
學校總部員工id=3
學校總部員工id=4
1)迪公尺特注的核心是降低類之間的耦合
2)但是注意:由於每個類都減少了不必要的依賴,因此迪公尺特法則只是要求降低類間(物件間)耦合關係,並不是要求完全沒有依賴關係
設計模式七大原則之迪公尺特法則
簡介 迪公尺特法則又叫 最少知道原則 即乙個類對自己依賴的類知道的越少越好 使他們之間有最低耦合度 對於依賴的類不管多複雜,都盡量把邏輯封裝在類內部,對外出了提供public方法,不洩露任何的資訊,最簡單的說就是 只與直接的朋友通訊 每個物件都會與其他的物件之間產生耦合關係,只要兩個物件之間存在耦合...
設計模式6大原則 迪公尺特法則
迪公尺特法則 law of emeter 定義 乙個物件應該對其他物件了解最少 迪公尺特法則的核心觀念就是類間解耦,弱耦合,只有弱耦合了以後,類的復用性才可以提高。形象一點的比喻類似於 監獄內的犯人是不應該跟外面的人接觸的,當然或許會有探親的。這裡的監獄就是類,裡面的犯人就是類內部的資訊,而監獄裡的...
設計模式六大原則 迪公尺特法則
背景 在學校學習時,可能因為某些事你得去其他二級學院的老師幫忙,大部分老師都是忙的 也許是的 很可能一件小事你要跑很多次。但是如果 你這件事直接找的是其他學院的院長,並且院長同意幫忙的話這件事解決起來就容易多了。不知怎地最近老是瞎想感覺這件事又能和設計模式中的迪公尺特法則 law of demete...