下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計(jì)模式六大原則(5):迪米特法則-編程開發(fā)技術(shù)設(shè)計(jì)模式六大原則(5):迪米特法則原文出處:卡奴達(dá)摩的專欄定義:一個對象應(yīng)該對其他對象保持最少的了解。問題由來:類與類z間的關(guān)系越密切,耦合度越大,當(dāng)一個類發(fā)生改變時,對另 一個類的影響也越大。解決方案:盡量降低類與類之間的耦合。自從我們接觸編程開始,就知道了軟件編程的總的原則:低耦合,高內(nèi)聚。無論 是面向過程編程還是面向?qū)ο缶幊?,只冇使各個模塊之間的耦合盡量的低,才能 提高代碼的復(fù)用率。低耦合的優(yōu)點(diǎn)不言而喻,但是怎么樣編程才能做到低耦合 呢?那正是迪米特法則要去完成的。迪米特法則乂叫最少知道原則,最早是在1987年由美國northeastern
2、 university的bn holland提岀。通俗的來講,就是一個類對自己依賴的類知 道的越少越好。也就是說,對于被依賴的類來說,無論邏輯多么復(fù)雜,都盡量地 的將邏輯封裝在類的內(nèi)部,對外除了提供的public方法,不對外泄漏任何信息。 迪米特法則還有一個更簡單的定義:只與直接的朋友通信。首先來解釋一下什么 是直接的朋友:每個對象都會與其他對象有耦合關(guān)系,只要兩個對象z間有耦合 關(guān)系,我們就說這兩個對象之間是朋友關(guān)系。耦合的方式很多,依賴、關(guān)聯(lián)、組 合、聚合等。其中,我們稱出現(xiàn)成員變量、方法參數(shù)、方法返冋值中的類為直接 的朋友,而出現(xiàn)在局部變量屮的類則不是直接的朋友。也就是說,陌生的類最好
3、不要作為局部變量的形式岀現(xiàn)在類的內(nèi)部。舉一個例子:有一個集團(tuán)公司,下屬單位有分公司和直屬部門,現(xiàn)在要求打卬出 所有下屬單位的員工id。先來看一下違反迪米特法則的設(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();為分公司人員按順序分配一個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();為總公司人員按順序分配一個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)在這個設(shè)計(jì)的主要問題岀在companymanager屮,根據(jù)迪米特法則,只與直接 的朋友發(fā)生通信,而subemployee類并不是companymanager類的直接朋友(以 局部變量出現(xiàn)的耦合不屬丁直接朋友),從邏輯上講總公司只與他的分公司耦合 就行了,與分公司的員工并沒有任何聯(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();/為分公司人員按順序分配一個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();/為總公司人員按順序分配一個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)用來打印,從而避 免了與分公司的員工發(fā)生耦合。迪米特法則的初衷是降低類z間的耦合,由丁每個類都減少了不必耍的依賴,因 此的確可以降低耦合關(guān)系。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度旅游旺季臨時導(dǎo)游勞務(wù)合同范本4篇
- 2025年度個人果園綠色種植與農(nóng)產(chǎn)品溯源服務(wù)合同4篇
- 2025年度木工產(chǎn)品包裝設(shè)計(jì)與印刷合同3篇
- 二零二五年度室內(nèi)木門翻新與維修服務(wù)合同范本4篇
- 2025版煤炭行業(yè)人力資源培訓(xùn)與合作合同4篇
- 2025年度美發(fā)行業(yè)技師技能認(rèn)證與培訓(xùn)合同4篇
- 二零二五年度木飾面原材料質(zhì)量控制與認(rèn)證合同3篇
- 2025年臨時企業(yè)靈活勞務(wù)外包協(xié)議
- 2025年家族遺產(chǎn)繼承公約規(guī)劃協(xié)議
- 2025年合同追償協(xié)議
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 2024年湖北省知名中小學(xué)教聯(lián)體聯(lián)盟中考語文一模試卷
- 2024年湖北省中考數(shù)學(xué)試卷(含答案)
- 油煙機(jī)清洗安全合同協(xié)議書
- 2024年云南省中考數(shù)學(xué)試題(原卷版)
- 污水土地處理系統(tǒng)中雙酚A和雌激素的去除及微生物研究
- 氣胸病人的護(hù)理幻燈片
- 《地下建筑結(jié)構(gòu)》第二版(朱合華)中文(2)課件
- JB T 7946.1-2017鑄造鋁合金金相
- 包裝過程質(zhì)量控制
評論
0/150
提交評論