簡介
迪公尺特法則又叫「最少知道原則」,即乙個類對自己依賴的類知道的越少越好(使他們之間有最低耦合度),對於依賴的類不管多複雜,都盡量把邏輯封裝在類內部,對外出了提供public
方法,不洩露任何的資訊,最簡單的說就是:只與直接的朋友通訊
每個物件都會與其他的物件之間產生耦合關係,只要兩個物件之間存在耦合關係,我們就說他們是朋友;耦合有很多種方式,如:繼承、依賴、聚合、組合等。其中,我們稱出現在成員變數、方法引數、方法返回值(位置)中的類,這樣的類為直接朋友;而出現在區域性變數中的類不是直接朋友,即陌生的類最好不要以區域性變數的形式出現在類的內部。
例項分享
最初的**:
//客戶端
public
class
demeter1
}//學校總部員工類
class
employee
public string getid()
}//學院的員工類
class
collegeemployee
public string getid()
}//管理學院員工的管理類
class
collegemanager
return list;}}
//學校管理類
//分析 schoolmanager 類的直接朋友類有 employee(返回值)、collegemanager(方法引數)
//collegeemployee 不是 直接朋友 而是乙個陌生類,這樣違背了 迪公尺特法則
class
schoolmanager
return list;
}//該方法完成輸出學校總部和學院員工資訊(id)
void
printallemployee
(collegemanager collegemanager)
//獲取到學校總部員工
list
list2 =
this
.getallemployee()
; system.out.
println
("------------學校總部員工------------");
for(employee e : list2)
}}
這一版的不足:在schoolmanager
中,collegeemployee
類並不是schoolmanager
類的直接朋友,按照迪公尺特法則,應該避免這種非直接朋友的耦合關係存在,下面進行改進。
改進後的**:
//客戶端
public
class
demeter1
}//學校總部員工類
class
employee
public string getid()
}//學院的員工類
class
collegeemployee
public string getid()
}//管理學院員工的管理類
class
collegemanager
return list;
}//輸出學院員工的資訊
public
void
printemployee()
}}//學校管理類
//分析 schoolmanager 類的直接朋友類有哪些 employee(返回結果)、collegemanager(引數)
//collegeemployee 不是 直接朋友 而是乙個陌生類,這樣違背了 迪公尺特法則(collegeemployee既不是成員變數,也不是返回值,還不是引數)
class
schoolmanager
return list;
}//該方法完成輸出學校總部和學院員工資訊(id)
void
printallemployee
(collegemanager collegemanager)
}}
小結
迪公尺特法則的核心:降低類之間的耦合度
ps:由於每個類都減少了不必要的依賴,故迪公尺特法則只是要求降低類間(物件間)耦合度,並不是要求完全沒有依賴關係。
設計模式 七大原則 迪公尺特法則
demeterprinciple 1.乙個物件應該對其他物件保持最少的了解 2.類與類關係越密切,耦合度越大 3.迪公尺特法則demeterprinciple又叫最少知道原則,即乙個類對自己依賴的類知道的越少越好 也就是說,對於被依賴的類不管多麼複雜,都盡量將邏輯封裝在類的內部 對外除了提供的pub...
七大設計原則之迪公尺特法則
定義 迪公尺特法則 law of demeter,lod 也稱為最少知識原則 least knowledge principle,lkp 乙個物件應該對其他物件有最少的了解。通俗地講,乙個類應該對自己需要耦合或呼叫的類知道得最少,它的內部是如何複雜都和自己沒關係,只需知道它提供的public方法,其...
設計模式6大原則 迪公尺特法則
迪公尺特法則 law of emeter 定義 乙個物件應該對其他物件了解最少 迪公尺特法則的核心觀念就是類間解耦,弱耦合,只有弱耦合了以後,類的復用性才可以提高。形象一點的比喻類似於 監獄內的犯人是不應該跟外面的人接觸的,當然或許會有探親的。這裡的監獄就是類,裡面的犯人就是類內部的資訊,而監獄裡的...