設(shè)計(jì)模式中的6大基本原則是為了讓我們在應(yīng)用開發(fā)中能夠擁抱變化累颂,也就意味著在后續(xù)升級敷燎、維護(hù)過程中不破壞系統(tǒng)穩(wěn)定性并保持高可擴(kuò)展性涛舍、高內(nèi)聚澄惊、低耦合,讓項(xiàng)目經(jīng)歷多個(gè)版本后依然保持清晰富雅、靈活掸驱、穩(wěn)定的系統(tǒng)結(jié)構(gòu)。
六大原則
- 優(yōu)化代碼第一步:單一職責(zé)原則
- 讓程序更穩(wěn)定更靈活:開閉原則
- 構(gòu)建擴(kuò)展性更好的系統(tǒng):里式替換原則
- 讓項(xiàng)目擁有變化的能力:依賴倒置原則
- 系統(tǒng)有更高的靈活性:接口隔離原則
- 更好地?cái)U(kuò)展性:迪米特原則
1.單一職責(zé)原則
就是一個(gè)類而言没佑,應(yīng)該僅有一個(gè)引起它變化的原因毕贼。簡單來說,一個(gè)類中應(yīng)該是一組相關(guān)性很高的函數(shù)蛤奢、數(shù)據(jù)的封裝鬼癣。
比如當(dāng)要做一個(gè)圖片加載器的時(shí)候陶贼,不應(yīng)該把所有的東西都寫在一個(gè)類中,應(yīng)該各個(gè)功能獨(dú)立出來待秃,可以分成圖片加載功能和緩存功能等模塊拜秧,這樣類中的代碼邏輯清晰可讀性、可擴(kuò)展性和可維護(hù)性會(huì)大大提高章郁。
2.開閉原則
軟件中的對象(類枉氮、模塊、函數(shù)等)應(yīng)該對于擴(kuò)展是開放的暖庄,對于修改是封閉的聊替。在軟件的生命周期內(nèi),因?yàn)樽兓嗬⑸壓途S護(hù)等原因需要對軟件原有代碼進(jìn)行修改時(shí)佃牛,可能會(huì)講錯(cuò)誤引入原本已經(jīng)經(jīng)過測試的舊代碼中,破壞原有系統(tǒng)医舆。因此,當(dāng)軟件需要變化時(shí)象缀,我們應(yīng)該盡量通過擴(kuò)展的方式來實(shí)現(xiàn)變化蔬将,而不是通過修改已有的代碼來實(shí)現(xiàn)。
3.里式替換原則
所有引用基類的地方必須能透明地使用其子類對象央星。面向?qū)ο蟮恼Z言三大特點(diǎn)是:繼承霞怀、封裝、多態(tài)莉给,里式替換原則就是依賴于繼承毙石、多態(tài)這個(gè)兩大特點(diǎn)。簡單說就是只要父類出現(xiàn)的地方子類就可以出現(xiàn)颓遏,而且替換為子類也不會(huì)產(chǎn)生任何錯(cuò)誤或異常徐矩,或者可能根本就不需要知道父類還是子類。但是反過來就不行了叁幢,有子類出現(xiàn)的地方滤灯,父類未必就能適應(yīng)。
4.依賴倒置原則
其指出了一種特點(diǎn)的解耦形式曼玩,使得高層次的模塊不依賴于低層次的模塊的實(shí)現(xiàn)細(xì)節(jié)的目的鳞骤,依賴模塊被顛倒了。
幾個(gè)關(guān)鍵點(diǎn):
(1)高層模塊不應(yīng)該依賴底層模塊黍判,兩者都應(yīng)該依賴其抽象豫尽。
(2)抽象不依賴于細(xì)節(jié)。
(3)細(xì)節(jié)應(yīng)該依賴抽象顷帖。
5.接口隔離原則
定義:客戶端不應(yīng)該依賴它不需要的接口美旧。另一種定義是:類之間的依賴關(guān)系應(yīng)該建立在最小的接口上渤滞。接口隔離原則將非常龐大、臃腫的接口拆分成更小和更具體的接口陈症,這樣客戶端將會(huì)只需知道他們感興趣的方法蔼水。接口隔離原則的目的是系統(tǒng)解開耦合,從而容易重構(gòu)录肯、更改和重新部署趴腋。
6.迪米特原則
也稱為最小知識原則。一個(gè)對象應(yīng)該對其他對象有最少的了解论咏。通俗的講优炬,一個(gè)類應(yīng)該對自己需要耦合或調(diào)用的類知道得最小,類的內(nèi)部如何實(shí)現(xiàn)與調(diào)用者或者依賴者沒關(guān)系厅贪,調(diào)用者或者依賴者只需要知道它需要的方法即可蠢护,其他的可一概不管。類與類之間關(guān)系越密切养涮,耦合越大葵硕,當(dāng)一個(gè)類方法改變時(shí),對另一個(gè)類的影響也越大贯吓。
參考《設(shè)計(jì)模式》一書