設(shè)計(jì)模式六大原則

如果說編碼是筋骨皮终抽,那么思想就是一口氣戳表,就是內(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á)

盡量降低類與類之間的耦合鹿榜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锦爵,隨后出現(xiàn)的幾起案子舱殿,更是在濱河造成了極大的恐慌,老刑警劉巖险掀,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沪袭,死亡現(xiàn)場離奇詭異,居然都是意外死亡樟氢,警方通過查閱死者的電腦和手機(jī)冈绊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埠啃,“玉大人死宣,你說我怎么就攤上這事〔昕” “怎么了毅该?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵博秫,是天一觀的道長。 經(jīng)常有香客問我眶掌,道長挡育,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任朴爬,我火速辦了婚禮即寒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寝殴。我一直安慰自己蒿叠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布蚣常。 她就那樣靜靜地躺著市咽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抵蚊。 梳的紋絲不亂的頭發(fā)上施绎,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音贞绳,去河邊找鬼谷醉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冈闭,可吹牛的內(nèi)容都是我干的俱尼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼萎攒,長吁一口氣:“原來是場噩夢啊……” “哼遇八!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耍休,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤刃永,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后羊精,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斯够,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年喧锦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了读规。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡燃少,死狀恐怖掖桦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情供汛,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站怔昨,受9級(jí)特大地震影響雀久,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜趁舀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一赖捌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矮烹,春花似錦越庇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仁期,卻和暖如春桑驱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跛蛋。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工熬的, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赊级。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓押框,卻偏偏與公主長得像,于是被迫代替她去往敵國和親理逊。 傳聞我的和親對象是個(gè)殘疾皇子橡伞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式六大原則 設(shè)計(jì)模式六大原則(1):單一職責(zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因。通俗的說挡鞍,即一個(gè)類...
    viva158閱讀 770評(píng)論 0 1
  • 轉(zhuǎn)載標(biāo)注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設(shè)計(jì)模式六...
    Bloo_m閱讀 720評(píng)論 0 7
  • 設(shè)計(jì)模式六大原則(1):單一職責(zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因骑歹。通俗的說,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)墨微。 ...
    Jabir_Zhang閱讀 646評(píng)論 0 3
  • 什么是設(shè)計(jì)模式道媚?設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多數(shù)人知曉的翘县、經(jīng)過分類的最域、代碼設(shè)計(jì)經(jīng)驗(yàn)的...
    星星_點(diǎn)燈閱讀 404評(píng)論 0 0
  • Java 設(shè)計(jì)模式六大原則 單一職責(zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類變更的原因。通俗的說锈麸,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)...
    _凌浩雨閱讀 443評(píng)論 0 2