摘要:個(gè)人博客原文迪米特法則設(shè)計(jì)模式六大原則之五迪米特法則。老師便給同學(xué)們講解了這個(gè)例子,讓學(xué)生感受一番迪米特法則??偨Y(jié)迪米特法則主要講述的觀點(diǎn)是高內(nèi)聚低耦合。
個(gè)人博客原文:
迪米特法則
設(shè)計(jì)模式六大原則之五:迪米特法則。簡介
姓名:迪米特法則
英文名:Law of Demeter
小名:最少知識(shí)原則
小名英文名:Least Knowledge Principle
價(jià)值觀:媽媽說不和陌生人說話
個(gè)人介紹:
Each unit should have only limited knowledge about other units: only units "closely" related to the current unit. (每個(gè)單元對(duì)于其他的單元只能擁有有限的知識(shí):只是與當(dāng)前單元緊密聯(lián)系的單元)
Each unit should only talk to its friends; don"t talk to strangers. (每個(gè)單元只能和它的朋友交談:不能和陌生單元交談)
Only talk to your immediate friends. (只和自己直接的朋友交談)
(來自維基百科)
還是腦洞大開來個(gè)小故事。這故事還是比較現(xiàn)實(shí)一些,其實(shí)也不算是故事,就是咱們經(jīng)常經(jīng)歷的事情,現(xiàn)在知識(shí)付費(fèi)已經(jīng)廣受歡迎,18 年底更是快速猛漲,各種各樣的培訓(xùn)、讀書、音頻學(xué)習(xí)軟件如雨后春筍一般涌現(xiàn)出來。我們就拿一個(gè)讀書的例子。
有一天,設(shè)計(jì)模式老師講解了迪米特法則,同學(xué)們聽得云里霧里的,老師怕同學(xué)們沒掌握這個(gè)知識(shí)點(diǎn),就給同學(xué)們布置了一個(gè)作業(yè),需要同學(xué)們按迪米特法則實(shí)現(xiàn)。
作業(yè)是這樣子的:平常在零碎的時(shí)間里,喜歡看一些書籍,一般都是電子書,現(xiàn)在我們看書的操作是這樣的:喚醒手機(jī),打開閱讀軟件,選擇書籍,然后閱讀。總共 3 個(gè)步驟,涉及了 3 樣?xùn)|西:手機(jī)、軟件、書籍。同學(xué)們用代碼實(shí)現(xiàn)這個(gè)過程。
第二天上課,同學(xué)們紛紛交了作業(yè),老師隨手一番,就看到了 2 個(gè)鮮明的例子,很明顯,就是一好一壞。老師便給同學(xué)們講解了這 2 個(gè)例子,讓學(xué)生感受一番迪米特法則。
錯(cuò)誤例子public class LODErrorTest { public static void main(String[] args) { Phone phone = new Phone(); phone.readBook(); } } /** * 錯(cuò)誤的示范 */ class Phone { App app = new App(); Book book = new Book("設(shè)計(jì)模式"); public void readBook() { app.read(book); } } class App { public void read(Book book) { System.out.println(book.getTitle()); } } class Book { private String title; public Book(String title) { this.title = title; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
代碼:
LODErrorTest
代碼是完成了讀書這個(gè)過程,看樣子是功能實(shí)現(xiàn)了,細(xì)看會(huì)發(fā)現(xiàn)代碼的邏輯不對(duì)。哪里不對(duì)呢?書籍和應(yīng)用對(duì)象都在手機(jī)上,現(xiàn)實(shí)是我們喚醒手機(jī),這時(shí)手機(jī)是沒有書籍的,只有當(dāng)我們打開閱讀軟件,才有書籍可以看,沒有閱讀軟件,書籍是看不了的。因此,手機(jī)和書籍沒有一毛錢關(guān)系,書籍不應(yīng)該在手機(jī)里面。正常的設(shè)計(jì)是:手機(jī)里面有閱讀軟件,閱讀軟件里面有書籍,這才符合迪米特法則,按定義來說:手機(jī)和閱讀軟件是朋友,閱讀軟件和書籍是朋友,可是朋友的朋友不是朋友,也就是手機(jī)和書籍不是朋友,所以它們不應(yīng)該有交集,應(yīng)該離得遠(yuǎn)遠(yuǎn)的。
思考一下現(xiàn)實(shí):工作中如果缺少代碼復(fù)核這個(gè)步驟,就會(huì)出現(xiàn)這樣子,后果是怎么樣呢?會(huì)給后人挖坑,而且是大坑,因?yàn)楹同F(xiàn)實(shí)中的邏輯是對(duì)不上的,況且后人不知道當(dāng)時(shí)的業(yè)務(wù)背景,只能看代碼去熟悉,就會(huì)一步錯(cuò)、步步錯(cuò),所以要好好把控代碼質(zhì)量這一關(guān),因?yàn)榇a千人千面,沒法要求代碼風(fēng)格全部一致,但至少需要實(shí)現(xiàn)邏輯是清晰易懂的。
正確例子public class LODRightTest { public static void main(String[] args) { Phone2 phone2 = new Phone2(); phone2.readBook(); } } /** * 正確的示范 */ class Phone2 { private App2 app2 = new App2(); public void readBook() { app2.read(); } } class App2 { private Book2 book2 = new Book2("設(shè)計(jì)模式"); public void read() { System.out.println(book2.getTitle()); } } class Book2 { private String title; public Book2(String title) { this.title = title; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
代碼:
LODRightTest
這段代碼就符合迪米特法則,手機(jī)中有閱讀軟件,閱讀軟件中有書籍,手機(jī)沒有書籍任何影子。正確代碼不用細(xì)講,用心去感受就可以體會(huì)到。
總結(jié)迪米特法則主要講述的觀點(diǎn)是高內(nèi)聚、低耦合。我理解為:是你的,就別給別人;不是你的,就別拿。上面定義的朋友也是這個(gè)意思。
參考資料:《大話設(shè)計(jì)模式》、《Java設(shè)計(jì)模式》、《設(shè)計(jì)模式之禪》、《研磨設(shè)計(jì)模式》、《Head First 設(shè)計(jì)模式》
寫到這,第五個(gè)原則了,六大原則就剩下最后一個(gè)開閉原則,湊齊 6 把大刀就可以準(zhǔn)備去大干 23 個(gè)大漢啦。。。想想都激動(dòng)。
希望文章對(duì)您有所幫助,設(shè)計(jì)模式系列會(huì)持續(xù)更新,感興趣的同學(xué)可以關(guān)注公眾號(hào),第一時(shí)間獲取文章推送閱讀,也可以一起交流,交個(gè)朋友。
公眾號(hào)之設(shè)計(jì)模式系列文章
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72834.html
摘要:單一職責(zé)原則開閉原則里氏替換原則依賴倒置原則接口隔離原則迪米特法則組合聚合復(fù)用原則單一職責(zé)原則高內(nèi)聚低耦合定義不要存在多于一個(gè)導(dǎo)致類變更的原因。建議接口一定要做到單一職責(zé),類的設(shè)計(jì)盡量做到只有一個(gè)原因引起變化。使用繼承時(shí)遵循里氏替換原則。 單一職責(zé)原則 開閉原則 里氏替換原則 依賴倒置原則 接口隔離原則 迪米特法則 組合/聚合復(fù)用原則 單一職責(zé)原則(Single Responsi...
摘要:常用的六大設(shè)計(jì)模式有單一職責(zé)原則,里氏替換原則,依賴倒轉(zhuǎn)原則,接口隔離原則,迪米特法則,開閉原則。這六大原則是最虛,最抽象的,很難理解。這就是接口隔離原則。當(dāng)我們遵循前面介紹的五大原則,以及使用種設(shè)計(jì)模式的目的就是遵循開閉原則。 設(shè)計(jì)模式的目的是為了更好的代碼重用性,可讀性,可靠性和可維護(hù)性。常用的六大設(shè)計(jì)模式有:單一職責(zé)原則(SRP),里氏替換原則(LSP),依賴倒轉(zhuǎn)原則(DIP...
摘要:依賴倒置原則是個(gè)設(shè)計(jì)原則中最難以實(shí)現(xiàn)的原則,它是實(shí)現(xiàn)開閉原則的重要途徑,依賴倒置原則沒有實(shí)現(xiàn),就別想實(shí)現(xiàn)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。 1、單一職能原則(Single Responsibility Principle, SRP) 定義 There should never be more than one reason for a class to change.應(yīng)該有且僅有一個(gè)原因引起類的...
摘要:六開閉原則開閉原則簡介開閉原則的英文名稱是,簡稱。開閉原則是面向?qū)ο笤O(shè)計(jì)中最基礎(chǔ)的設(shè)計(jì)原則,它指導(dǎo)我們?nèi)绾谓⒁粋€(gè)穩(wěn)定靈活的軟件系統(tǒng)。 面向?qū)ο蠡驹瓌t(3)- 最少知道原則與開閉原則 面向?qū)ο蠡驹瓌t(1)- 單一職責(zé)原則與接口隔離原則面向?qū)ο蠡驹瓌t(2)- 里式代換原則與依賴倒置原則面向?qū)ο蠡驹瓌t(3)- 最少知道原則與開閉原則 五、最少知道原則【迪米特法則】 1. 最少知道...
閱讀 3208·2023-04-26 01:30
閱讀 671·2021-11-08 13:15
閱讀 1792·2021-09-24 10:35
閱讀 1005·2021-09-22 15:41
閱讀 1933·2019-08-30 15:44
閱讀 598·2019-08-30 13:22
閱讀 1012·2019-08-30 13:06
閱讀 1203·2019-08-29 13:22