设计模式的六大原则(个人笔记)
一、單一職責(zé)原則
單一職責(zé)原則:一個類只負(fù)責(zé)一個功能領(lǐng)域中的相應(yīng)職責(zé),或者可以定義為:就一個類而言,應(yīng)該只有一個?引起它變化的原因。
就是說一個類不能太”累“,一個類承擔(dān)的責(zé)任越多,它被復(fù)用的肯能性就越小,而且一個類承擔(dān)的責(zé)任過多,就相當(dāng)于將這些職責(zé)耦合在一起,
當(dāng)其中一個職責(zé)變化時,可能會影響到其他職責(zé)的運作,因此要將這些職責(zé)分離,封裝在不同的類中。
單一職責(zé)的原則就是:實現(xiàn)高內(nèi)聚、低耦合的指導(dǎo)方針,它是簡單但是又難運用的原則,需要設(shè)計人員發(fā)現(xiàn)類的不同職責(zé)將其分離,而發(fā)現(xiàn)類的多重職責(zé)需要設(shè)計人員具有較強的
分析能力和設(shè)計能力和相關(guān)實踐經(jīng)驗。
二、開閉原則
開閉原則:一個軟件實體可以指一個應(yīng)當(dāng)對擴展開放,對修改關(guān)閉。即軟件實體應(yīng)盡量在不修改原有代碼的情況下進行擴展。
在開閉原則的定義中,一個軟件實體可以指一個軟件模塊,一個由多個類組成的局部結(jié)構(gòu)或一個獨立的類。
為了滿足開閉原則,需要對系統(tǒng)進行抽象設(shè)計,抽象化是開閉原則的關(guān)鍵。可以定義一個相對穩(wěn)定的抽象層,在通過具體類來進行擴展,
如果有需要改動系統(tǒng)的行為,無需對抽象層進行任何改動,只需要增加新的具體類來實現(xiàn)新的業(yè)務(wù)功能即可,實現(xiàn)在不修改已有代碼的基礎(chǔ)上擴展系統(tǒng)的功能,達(dá)到開閉原則的要求。
三、里氏替換?原則
里氏替換原則:所有引用基類的地方必須能透明地使用其子類的對象。
里氏替換原則告訴我們,在軟件中將一個基類對象替換成它的子類對象,程序?qū)⒉粫a(chǎn)生任何錯誤和異常,反過來則不成立。
如果一個軟件實體使用的是一個子類對象的話,那么它不一定能夠使用基類對象。例如:我喜歡動物,那我一定喜歡狗,因為狗是動物的子類;
但是我喜歡狗,不能斷定我喜歡動物。
里氏替換原則是實現(xiàn)開閉原則的重要方式之一,由于使用基類對象的地方都可以使用子類對象,因此在程序中盡量使用基類類型來定義對象 ,
而在運行時再確定其子類類型,用子類對象來替換父類對象。
四、依賴倒置原則
依賴倒置原則:抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)當(dāng)依賴于抽象。
如果說開閉原則是面向?qū)ο笤O(shè)計的目標(biāo)的話 ,那么依賴倒置原則就是面向?qū)ο笤O(shè)計的主要實現(xiàn)機制之一,它是系統(tǒng)抽象化的具體實現(xiàn)。
依賴倒置原則要求我們在程序代碼中傳遞參數(shù)時或在關(guān)聯(lián)關(guān)系中,盡量引用高層次的抽象層類,即使用接口和抽象類進行變量類型聲明、方法返回類型聲明,
以及數(shù)據(jù)類型的轉(zhuǎn)換等,而不要用具體類來做這些事情。為了確保該原則的應(yīng)用,一個具體類應(yīng)當(dāng)實現(xiàn)接口和抽象類中聲明過的方法,而不要給多余的方法,
否則將無法調(diào)用到子類中增加的新方法。
在實現(xiàn)依賴倒置原則時,我們需要針對抽象層編程,而將具體類的對象通過依賴注入的方式注入到其他對象中,依賴注入是指當(dāng)一個對象要與其他對象發(fā)生依賴關(guān)系時,
通過抽象來注入所依賴的對象。常用的注入方式有三種,分別是:構(gòu)造注入,設(shè)值注入和接口注入。構(gòu)造注入是指通過構(gòu)造函數(shù)來傳入具體類的對象,設(shè)值注入是指通過Setter
方法來傳入具體類的對象,而接口注入是指通過在接口中聲明的業(yè)務(wù)方法來傳入具體類的對象。這些方法在定義時使用的是抽象類型,在運行時再傳入具體類型的對象,由子類對象覆蓋父類對象。
五、接口隔離原則
每一個接口應(yīng)該承擔(dān)一種相對獨立的角色,不干不該干的事,該干的事都要干。
接口僅僅提供客戶端需要的行為,客戶端不需要的行為則隱藏起來,應(yīng)當(dāng)為客戶端提供盡可能小的單獨的接口,而不要提供大的接口。
但是接口不能太小,如果太小會導(dǎo)致系統(tǒng)中接口泛濫,不利于維護。
六、迪米特法則
迪米特法則:一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用。
迪米特法則可降低系統(tǒng)的耦合度,使類與類之間保持松散的耦合關(guān)系。
迪米特法則還有幾種定義形式,包括:不要和“陌生人”說話,只與你的直接朋友通信等。
其朋友包括以及幾類:
(1)當(dāng)前對象本身
(2)以參數(shù)形式傳入到當(dāng)前對象方法中的對象
(3)當(dāng)前對象的成員對象
(4)如果當(dāng)前對象的成員對象是一個集合,那么集合中的元素也是朋友
(5)當(dāng)前對象所創(chuàng)的對象
任何一個對象,如果不滿足上面的條件之一,就是當(dāng)前對象的“朋友”,否則就是“陌生人”。
迪米特法則要求我們在設(shè)計系統(tǒng)時,應(yīng)該盡量減少對象之間的交互,如果兩個對象之間不必彼此直接通信,那么這兩個對象就不應(yīng)當(dāng)發(fā)生任何直接的相互作用,
如果其中的一個對象需要調(diào)用另一個對象的某一個方法的話,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用。簡而言之,就是通過引入一個合理的第三者來降低現(xiàn)有對象之間的耦合度。
在將迪米特法則運用到系統(tǒng)設(shè)計中時,要注意下面的幾點:在類的劃分上,應(yīng)當(dāng)盡量創(chuàng)建松耦合的類,類之間的耦合度越低,就越有利于復(fù)用,一個處在松耦合中的類一旦被修改,
不會對關(guān)聯(lián)的類造成太大波及;在類的結(jié)構(gòu)設(shè)計上,每一個類都應(yīng)當(dāng)盡量降低其成員變量和成員函數(shù)的訪問權(quán)限;
在類的設(shè)計上,只要有可能,一個類型應(yīng)當(dāng)設(shè)計成不變類;在對其他類的引用上,一個對象對其他對象的引用應(yīng)當(dāng)降到最低。
?
轉(zhuǎn)載于:https://www.cnblogs.com/BounceGuo/p/9724969.html
總結(jié)
以上是生活随笔為你收集整理的设计模式的六大原则(个人笔记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 邓俊辉数据结构学习-3-栈
- 下一篇: WPF中使用Hashtable剔除重复字