07-設(shè)計模式6原則大原則之迪米特法則(轉(zhuǎn)載)

定義:一個對象應(yīng)該對其他對象保持最少的了解肴盏。問題由來:類與類之間的關(guān)系越密切科盛,耦合度越大,當(dāng)一個類發(fā)生改變時菜皂,對另一個類的影響也越大贞绵。
解決方案:盡量降低類與類之間的耦合。
自從我們接觸編程開始恍飘,就知道了軟件編程的總的原則:低耦合榨崩,高內(nèi)聚。無論是面向過程編程還是面向?qū)ο缶幊陶履福挥惺垢鱾€模塊之間的耦合盡量的低母蛛,才能提高代碼的復(fù)用率。低耦合的優(yōu)點不言而喻乳怎,但是怎么樣編程才能做到低耦合呢彩郊?那正是迪米特法則要去完成的。
迪米特法則又叫最少知道原則蚪缀,最早是在1987年由美國Northeastern University的Ian Holland提出秫逝。通俗的來講,就是一個類對自己依賴的類知道的越少越好询枚。也就是說筷登,對于被依賴的類來說疾棵,無論邏輯多么復(fù)雜活孩,都盡量地的將邏輯封裝在類的內(nèi)部度秘,對外除了提供的public方法,不對外泄漏任何信息廉油。迪米特法則還有一個更簡單的定義:只與直接的朋友通信。首先來解釋一下什么是直接的朋友:每個對象都會與其他對象有耦合關(guān)系苗傅,只要兩個對象之間有耦合關(guān)系抒线,我們就說這兩個對象之間是朋友關(guān)系。耦合的方式很多渣慕,依賴嘶炭、關(guān)聯(lián)、組合逊桦、聚合等眨猎。其中,我們稱出現(xiàn)成員變量强经、方法參數(shù)睡陪、方法返回值中的類為直接的朋友,而出現(xiàn)在局部變量中的類則不是直接的朋友。也就是說兰迫,陌生的類最好不要作為局部變量的形式出現(xiàn)在類的內(nèi)部信殊。
舉一個例子:有一個集團公司,下屬單位有分公司和直屬部門汁果,現(xiàn)在要求打印出所有下屬單位的員工ID涡拘。先來看一下違反迪米特法則的設(shè)計。





    現(xiàn)在這個設(shè)計的主要問題出在CompanyManager中据德,根據(jù)迪米特法則鳄乏,只與直接的朋友發(fā)生通信,而SubEmployee類并不是CompanyManager類的直接朋友(以局部變量出現(xiàn)的耦合不屬于直接朋友)晋控,從邏輯上講總公司只與他的分公司耦合就行了汞窗,與分公司的員工并沒有任何聯(lián)系,這樣設(shè)計顯然是增加了不必要的耦合赡译。按照迪米特法則仲吏,應(yīng)該避免類中出現(xiàn)這樣非直接朋友關(guān)系的耦合。修改后的代碼如下:



修改后蝌焚,為分公司增加了打印人員ID的方法裹唆,總公司直接調(diào)用來打印,從而避免了與分公司的員工發(fā)生耦合只洒。
迪米特法則的初衷是降低類之間的耦合许帐,由于每個類都減少了不必要的依賴,因此的確可以降低耦合關(guān)系毕谴。但是凡事都有度成畦,雖然可以避免與非直接的類通信,但是要通信涝开,必然會通過一個“中介”來發(fā)生聯(lián)系循帐,例如本例中,總公司就是通過分公司這個“中介”來與分公司的員工發(fā)生聯(lián)系的舀武。過分的使用迪米特原則拄养,會產(chǎn)生大量這樣的中介和傳遞類,導(dǎo)致系統(tǒng)復(fù)雜度變大银舱。所以在采用迪米特法則時要反復(fù)權(quán)衡瘪匿,既做到結(jié)構(gòu)清晰,又要高內(nèi)聚低耦合寻馏。

轉(zhuǎn)自:http://blog.csdn.net/zhengzhb/article/details/7296930

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棋弥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诚欠,更是在濱河造成了極大的恐慌嘁锯,老刑警劉巖宪祥,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異家乘,居然都是意外死亡蝗羊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門仁锯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耀找,“玉大人,你說我怎么就攤上這事业崖∫懊ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵双炕,是天一觀的道長狞悲。 經(jīng)常有香客問我,道長妇斤,這世上最難降的妖魔是什么摇锋? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮站超,結(jié)果婚禮上荸恕,老公的妹妹穿的比我還像新娘。我一直安慰自己死相,他們只是感情好融求,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著算撮,像睡著了一般生宛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肮柜,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天茅糜,我揣著相機與錄音,去河邊找鬼素挽。 笑死,一個胖子當(dāng)著我的面吹牛狸驳,可吹牛的內(nèi)容都是我干的预明。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼耙箍,長吁一口氣:“原來是場噩夢啊……” “哼撰糠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辩昆,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阅酪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體术辐,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡砚尽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辉词。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片必孤。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瑞躺,靈堂內(nèi)的尸體忽然破棺而出敷搪,到底是詐尸還是另有隱情,我是刑警寧澤幢哨,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布赡勘,位于F島的核電站,受9級特大地震影響捞镰,放射性物質(zhì)發(fā)生泄漏闸与。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一曼振、第九天 我趴在偏房一處隱蔽的房頂上張望几迄。 院中可真熱鬧,春花似錦冰评、人聲如沸映胁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽解孙。三九已至,卻和暖如春抛人,著一層夾襖步出監(jiān)牢的瞬間弛姜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工妖枚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廷臼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓绝页,卻偏偏與公主長得像荠商,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子续誉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容