設(shè)計(jì)模式六大原則(5):迪米特法則-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第1頁(yè)
設(shè)計(jì)模式六大原則(5):迪米特法則-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第2頁(yè)
設(shè)計(jì)模式六大原則(5):迪米特法則-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第3頁(yè)
設(shè)計(jì)模式六大原則(5):迪米特法則-Java開(kāi)發(fā)Java經(jīng)驗(yàn)技巧_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、設(shè)計(jì)模式六大原則(5):迪米特法則-編程開(kāi)發(fā)技術(shù)設(shè)計(jì)模式六大原則(5):迪米特法則原文出處:卡奴達(dá)摩的專欄定義:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。問(wèn)題由來(lái):類與類z間的關(guān)系越密切,耦合度越大,當(dāng)一個(gè)類發(fā)生改變時(shí),對(duì)另 一個(gè)類的影響也越大。解決方案:盡量降低類與類之間的耦合。自從我們接觸編程開(kāi)始,就知道了軟件編程的總的原則:低耦合,高內(nèi)聚。無(wú)論 是面向過(guò)程編程還是面向?qū)ο缶幊?,只冇使各個(gè)模塊之間的耦合盡量的低,才能 提高代碼的復(fù)用率。低耦合的優(yōu)點(diǎn)不言而喻,但是怎么樣編程才能做到低耦合 呢?那正是迪米特法則要去完成的。迪米特法則乂叫最少知道原則,最早是在1987年由美國(guó)northeastern

2、 university的bn holland提岀。通俗的來(lái)講,就是一個(gè)類對(duì)自己依賴的類知 道的越少越好。也就是說(shuō),對(duì)于被依賴的類來(lái)說(shuō),無(wú)論邏輯多么復(fù)雜,都盡量地 的將邏輯封裝在類的內(nèi)部,對(duì)外除了提供的public方法,不對(duì)外泄漏任何信息。 迪米特法則還有一個(gè)更簡(jiǎn)單的定義:只與直接的朋友通信。首先來(lái)解釋一下什么 是直接的朋友:每個(gè)對(duì)象都會(huì)與其他對(duì)象有耦合關(guān)系,只要兩個(gè)對(duì)象z間有耦合 關(guān)系,我們就說(shuō)這兩個(gè)對(duì)象之間是朋友關(guān)系。耦合的方式很多,依賴、關(guān)聯(lián)、組 合、聚合等。其中,我們稱出現(xiàn)成員變量、方法參數(shù)、方法返冋值中的類為直接 的朋友,而出現(xiàn)在局部變量屮的類則不是直接的朋友。也就是說(shuō),陌生的類最好

3、不要作為局部變量的形式岀現(xiàn)在類的內(nèi)部。舉一個(gè)例子:有一個(gè)集團(tuán)公司,下屬單位有分公司和直屬部門,現(xiàn)在要求打卬出 所有下屬單位的員工id。先來(lái)看一下違反迪米特法則的設(shè)計(jì)??偣締T工class employee!private string id;public void setld(string id) this, id 二 id;public string gctld()return id; 分公司員工 class subemployee private string id;public void setld(string id) this, id 二 id;public string getlc

4、l() return id;class subcompanymemagcrpublic list<subemployee> getallemployee() list<subemployee> list = new arraylist<subemployee>(); for(int i=0; i<100; i+) subemployee emp = new subemployee();為分公司人員按順序分配一個(gè)id emp. setld ("分公司+i); list, add(emp);return list;class companyman

5、ager public listemployce> getallemployce()list<employee> list = new arraylist<employee>(); for(int i=0; i<30; i+)employee emp 二 new employee();為總公司人員按順序分配一個(gè)id emp. setld(“總公司"+i);lisadd(emp);return list;public void printallemployee(subcompanymanager sub) list<subemployee>

6、; listl = sub. getallemployee(); for(subemployee e:listl) system. out. println(e. getid();list<employee> list2 = this. getallemployee(); for (employee e:list2)system, out. printin (e. getld ();public class clientpublic static void main(string args)companymanager e = new companymanager();e. pri

7、ntallemployee(new subcompanymanager();現(xiàn)在這個(gè)設(shè)計(jì)的主要問(wèn)題岀在companymanager屮,根據(jù)迪米特法則,只與直接 的朋友發(fā)生通信,而subemployee類并不是companymanager類的直接朋友(以 局部變量出現(xiàn)的耦合不屬丁直接朋友),從邏輯上講總公司只與他的分公司耦合 就行了,與分公司的員工并沒(méi)有任何聯(lián)系,這樣設(shè)計(jì)顯然是增加了不必要的耦合。 按照迪米特法則,應(yīng)該避免類屮岀現(xiàn)這樣卄直接刖友關(guān)系的耦合。修改后的代碼 如下:class subcompanymanager public list<subemployee> getahe

8、mployee() list<subemployee> list = new arraylist<subemployee>(); for(int i=0; i<100; i+) subemployee emp = new subemployee();/為分公司人員按順序分配一個(gè)id emp. setld(/z分公司+i);1 ist add(emp);return list;public void printemployee()list<subemployee> list 二 this. getal1 employee();for(subemploye

9、e e:list) system, out. printin (e. getld ();class companymanagerpublic list<employee> getallemployee()list<employee> list 二 new arraylist<employee>(); for(int i二0; i<30; i+) employee emp 二 new employee();/為總公司人員按順序分配一個(gè)id emp. setldc總公司"+i); list. add(emp);return list;public void printallemployee(subcompanymanager sub)sub. printemployee ();list<employee> list2 二 this. getahemployee();for(employee e:1ist2) systcm. out. printin (c. gctld ();修改后,為分公司増加了打印人員id的方法,總公司直接調(diào)用來(lái)打印,從而避 免了與分公司的員工發(fā)生耦合。迪米特法則的初衷是降低類z間的耦合,由丁每個(gè)類都減少了不必耍的依賴,因 此的確可以降低耦合關(guān)系。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論