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

一、單一職責(zé)

概念定義:一個(gè)類(lèi)只存在一個(gè)使它發(fā)生修改的原因。即一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)。
問(wèn)題由來(lái):類(lèi)T負(fù)責(zé)兩個(gè)不同的職責(zé):職責(zé)P1,職責(zé)P2。當(dāng)由于職責(zé)P1需求發(fā)生改變而需要修改類(lèi)T時(shí),有可能會(huì)導(dǎo)致原本運(yùn)行正常的職責(zé)P2功能發(fā)生故障。
解決方案:遵循單一職責(zé)原則。分別建立兩個(gè)類(lèi)T1、T2,使T1完成職責(zé)P1功能,T2完成職責(zé)P2功能。這樣,當(dāng)修改類(lèi)T1時(shí),不會(huì)使職責(zé)P2發(fā)生故障風(fēng)險(xiǎn);同理,當(dāng)修改T2時(shí),也不會(huì)使職責(zé)P1發(fā)生故障風(fēng)險(xiǎn)。

二、里氏代換原則

概念定義:所有引用父類(lèi)對(duì)象的地方用子類(lèi)對(duì)象替換后,程序執(zhí)行不會(huì)發(fā)生變化。子類(lèi)可以擴(kuò)展父類(lèi)的功能,但不能改變父類(lèi)原有的功能
問(wèn)題由來(lái):有一功能P1,由類(lèi)A完成?,F(xiàn)需要將功能P1進(jìn)行擴(kuò)展,擴(kuò)展后的功能為P,其中P由原有功能P1與新功能P2組成。新功能P由類(lèi)A的子類(lèi)B來(lái)完成,則子類(lèi)B在完成新功能P2的同時(shí),有可能會(huì)導(dǎo)致原有功能P1發(fā)生故障。
解決方案:當(dāng)使用繼承時(shí),遵循里氏替換原則。類(lèi)B繼承類(lèi)A時(shí),除添加新的方法完成新增功能P2外,盡量不要重寫(xiě)父類(lèi)A的方法,也盡量不要重載父類(lèi)A的方法。

三、依賴(lài)倒置原則

概念定義:高層模塊不應(yīng)該依賴(lài)低層模塊,二者都應(yīng)該依賴(lài)其抽象;抽象不應(yīng)該依賴(lài)細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴(lài)抽象。依賴(lài)倒置原則的核心就是要我們面向接口編程,理解了面向接口編程,也就理解了依賴(lài)倒置。
問(wèn)題由來(lái):類(lèi)A直接依賴(lài)類(lèi)B,假如要將類(lèi)A改為依賴(lài)類(lèi)C,則必須通過(guò)修改類(lèi)A的代碼來(lái)達(dá)成。這種場(chǎng)景下,類(lèi)A一般是高層模塊,負(fù)責(zé)復(fù)雜的業(yè)務(wù)邏輯;類(lèi)B和類(lèi)C是低層模塊,負(fù)責(zé)基本的原子操作;假如修改類(lèi)A,會(huì)給程序帶來(lái)不必要的風(fēng)險(xiǎn)。
解決方案:將類(lèi)A修改為依賴(lài)接口I,類(lèi)B和類(lèi)C各自實(shí)現(xiàn)接口I,類(lèi)A通過(guò)接口I間接與類(lèi)B或者類(lèi)C發(fā)生聯(lián)系,則會(huì)大大降低修改類(lèi)A的幾率。
舉例說(shuō)明:媽媽給孩子讀書(shū) 傳遞給媽媽 應(yīng)該是 “讀物”這個(gè)抽象類(lèi)而不是 具體的“故事書(shū)”實(shí)體,要不然后續(xù)增加?jì)寢屪x報(bào)的功能 就需要修改媽媽這個(gè)類(lèi)了顯然是不符合常理的。

四、接口隔離原則

概念定義:客戶(hù)端不應(yīng)該依賴(lài)它不需要的接口;一個(gè)類(lèi)對(duì)另一個(gè)類(lèi)的依賴(lài)應(yīng)該建立在最小的接口上。相當(dāng)于接口的單一職責(zé)
問(wèn)題由來(lái):類(lèi)A通過(guò)接口I依賴(lài)類(lèi)B,類(lèi)C通過(guò)接口I依賴(lài)類(lèi)D,如果接口I對(duì)于類(lèi)A和類(lèi)B來(lái)說(shuō)不是最小接口,則類(lèi)B和類(lèi)D必須去實(shí)現(xiàn)他們不需要的方法。
解決方案:將臃腫的接口I拆分為獨(dú)立的幾個(gè)接口,類(lèi)A和類(lèi)C分別與他們需要的接口建立依賴(lài)關(guān)系。也就是采用接口隔離原則。
舉例來(lái)說(shuō)明接口隔離原則:

五、迪米特法則

概念定義:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。
問(wèn)題由來(lái):類(lèi)與類(lèi)之間的關(guān)系越密切,耦合度越大,當(dāng)一個(gè)類(lèi)發(fā)生改變時(shí),對(duì)另一個(gè)類(lèi)的影響也越大。
解決方案:盡量降低類(lèi)與類(lèi)之間的耦合。

六、開(kāi)閉原則

概念定義:一個(gè)軟件實(shí)體如類(lèi)、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。
問(wèn)題由來(lái):在軟件的生命周期內(nèi),因?yàn)樽兓?、升?jí)和維護(hù)等原因需要對(duì)軟件原有代碼進(jìn)行修改時(shí),可能會(huì)給舊代碼中引入錯(cuò)誤,也可能會(huì)使我們不得不對(duì)整個(gè)功能進(jìn)行重構(gòu),并且需要原有代碼經(jīng)過(guò)重新測(cè)試
解決方案:當(dāng)軟件需要變化時(shí),盡量通過(guò)擴(kuò)展軟件實(shí)體的行為來(lái)實(shí)現(xiàn)變化,而不是通過(guò)修改已有的代碼來(lái)實(shí)現(xiàn)變化。

原文鏈接: http://blog.csdn.net/zhengzhb/article/details/7278174

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式六大原則 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類(lèi)變更的原因。通俗的說(shuō),即一個(gè)類(lèi)...
    viva158閱讀 821評(píng)論 0 1
  • 設(shè)計(jì)模式六大原則(1):?jiǎn)我宦氊?zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類(lèi)變更的原因。通俗的說(shuō),即一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)。 ...
    Jabir_Zhang閱讀 673評(píng)論 0 3
  • 轉(zhuǎn)載標(biāo)注聲明:http://www.uml.org.cn/sjms/201211023.asp 目錄:[設(shè)計(jì)模式六...
    Bloo_m閱讀 796評(píng)論 0 7
  • Java 設(shè)計(jì)模式六大原則 單一職責(zé)原則 定義:不要存在多于一個(gè)導(dǎo)致類(lèi)變更的原因。通俗的說(shuō),即一個(gè)類(lèi)只負(fù)責(zé)一項(xiàng)職責(zé)...
    _凌浩雨閱讀 460評(píng)論 0 2
  • 如果說(shuō)編碼是筋骨皮,那么思想就是一口氣,就是內(nèi)功。內(nèi)功深厚決定你功力的大小。剛剛讀完了設(shè)計(jì)模式那本書(shū)。隨著項(xiàng)目業(yè)務(wù)...
    Chinesszz閱讀 302評(píng)論 0 1

友情鏈接更多精彩內(nèi)容