如果說編碼是筋骨皮终抽,那么思想就是一口氣戳表,就是內(nèi)功。內(nèi)功深厚決定你功力的大小昼伴。剛剛讀完了設(shè)計(jì)模式那本書匾旭。隨著項(xiàng)目業(yè)務(wù)的復(fù)雜,越發(fā)的感覺到設(shè)計(jì)模式的重要性圃郊。在此參考CSDN价涝、伯樂在線和開源中國社區(qū),優(yōu)秀的博文持舆,以此總結(jié)色瘩。開始新的起點(diǎn)伪窖。
一、開閉原則
定義
一個(gè)軟件實(shí)體如類居兆、模塊和函數(shù)應(yīng)該對擴(kuò)展開放覆山,對修改關(guān)閉。
問題由來
在軟件的生命周期內(nèi)泥栖,因?yàn)樽兓乜怼⑸?jí)和維護(hù)等原因需要對軟件原有代碼進(jìn)行修改時(shí),可能會(huì)給舊代碼中引入錯(cuò)誤吧享,也可能會(huì)使我們不得不對整個(gè)功能進(jìn)行重構(gòu)魏割,并且需要原有代碼經(jīng)過重新測試。
解決方案
當(dāng)軟件需要變化時(shí)耙蔑,盡量通過擴(kuò)展軟件實(shí)體的行為來實(shí)現(xiàn)變化见妒,而不是通過修改已有的代碼來實(shí)現(xiàn)變化。
表達(dá)
用抽象構(gòu)建框架甸陌,用實(shí)現(xiàn)擴(kuò)展細(xì)節(jié)须揣。因?yàn)槌橄箪`活性好,適應(yīng)性廣钱豁,只要抽象的合理耻卡,可以基本保持軟件架構(gòu)的穩(wěn)定。而軟件中易變的細(xì)節(jié)牲尺,我們用從抽象派生的實(shí)現(xiàn)類來進(jìn)行擴(kuò)展卵酪,當(dāng)軟件需要發(fā)生變化時(shí),我們只需要根據(jù)需求重新派生一個(gè)實(shí)現(xiàn)類來擴(kuò)展就可以了谤碳。當(dāng)然前提是我們的抽象要合理溃卡,要對需求的變更有前瞻性和預(yù)見性才行。
二蜒简、單一職責(zé)原則
定義
不要存在多于一個(gè)導(dǎo)致類變更的原因瘸羡。通俗的說,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)搓茬。
問題由來
類T負(fù)責(zé)兩個(gè)不同的職責(zé):職責(zé)P1犹赖,職責(zé)P2。當(dāng)由于職責(zé)P1需求發(fā)生改變而需要修改類T時(shí)卷仑,有可能會(huì)導(dǎo)致原本運(yùn)行正常的職責(zé)P2功能發(fā)生故障峻村。
解決方案
遵循單一職責(zé)原則。分別建立兩個(gè)類T1锡凝、T2粘昨,使T1完成職責(zé)P1功能,T2完成職責(zé)P2功能。這樣雾棺,當(dāng)修改類T1時(shí)膊夹,不會(huì)使職責(zé)P2發(fā)生故障風(fēng)險(xiǎn);同理捌浩,當(dāng)修改T2時(shí)放刨,也不會(huì)使職責(zé)P1發(fā)生故障風(fēng)險(xiǎn)。
表達(dá)
不要讓責(zé)任擴(kuò)散
三尸饺、里氏替換原則
定義
所有引用基類的地方必須能透明地使用其子類的對象进统。
問題由來
有一功能P由類A完成,現(xiàn)在要擴(kuò)展P,其中P由類A的子類B完成浪听,則子類在完成的同時(shí)螟碎,可能會(huì)導(dǎo)致原來功能故障
解決方案
當(dāng)使用繼承時(shí),遵循里氏替換原則迹栓。類B繼承類A時(shí)掉分,除添加新的方法完成新增功能外,盡量不要重寫父類A的方法克伊,也盡量不要重載父類A的方法酥郭。
表達(dá)
使用繼承的時(shí)候,不要隨便修改父類中已經(jīng)實(shí)現(xiàn)的方法
四愿吹、依賴倒置原則
定義
高層模塊不應(yīng)該依賴低層模塊不从,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié)犁跪;細(xì)節(jié)應(yīng)該依賴抽象椿息。
問題由來
類A直接依賴類B,假如要將類A改為依賴類C坷衍,則必須通過修改類A的代碼來達(dá)成寝优。這種場景下,類A一般是高層模塊枫耳,負(fù)責(zé)復(fù)雜的業(yè)務(wù)邏輯倡勇;類B和類C是低層模塊,負(fù)責(zé)基本的原子操作嘉涌;假如修改類A,會(huì)給程序帶來不必要的風(fēng)險(xiǎn)夸浅。
解決方案
將類A修改為依賴接口I仑最,類B和類C各自實(shí)現(xiàn)接口I,類A通過接口I間接與類B或者類C發(fā)生聯(lián)系帆喇,則會(huì)大大降低修改類A的幾率警医。
表達(dá)
如果A依賴B,現(xiàn)在要改為依賴C,如果直接修改A有風(fēng)險(xiǎn)预皇,可以讓A去依賴一個(gè)接口侈玄,BC都實(shí)現(xiàn)這個(gè)接口,也就是策略模式
五吟温、接口隔離原則
定義
客戶端不應(yīng)該依賴它不需要的接口序仙;一個(gè)類對另一個(gè)類的依賴應(yīng)該建立在最小的接口上。
問題由來
類A通過接口I依賴類B鲁豪,類C通過接口I依賴類D潘悼,如果接口I對于類A和類B來說不是最小接口,則類B和類D必須去實(shí)現(xiàn)他們不需要的方法爬橡。
解決方案
將臃腫的接口I拆分為獨(dú)立的幾個(gè)接口治唤,類A和類C分別與他們需要的接口建立依賴關(guān)系。也就是采用接口隔離原則
表達(dá)
防止去實(shí)現(xiàn)不需要的接口方法糙申,可以按接口拆分宾添,避免臃腫。
六柜裸、迪米特法則
定義
一個(gè)對象應(yīng)該對其他對象保持最少的了解缕陕。
問題由來
類與類之間的關(guān)系越密切,耦合度越大粘室,當(dāng)一個(gè)類發(fā)生改變時(shí)榄檬,對另一個(gè)類的影響也越大。
解決方案
盡量降低類與類之間的耦合衔统。
表達(dá)
盡量降低類與類之間的耦合鹿榜。