P2 面向?qū)ο?大設(shè)計原則

變化是復(fù)用的天敵!面向?qū)ο笤O(shè)計的最大優(yōu)勢在于:抵御變化

設(shè)計原則比模式更重要,掌握了設(shè)計原則,可以開發(fā)出屬于自己的設(shè)計模式,而設(shè)計模式是不斷變化的,有可能已經(jīng)被淘汰了!設(shè)計原則可作為衡量軟件質(zhì)量的尺子!

1. 依賴倒置原則(DIP)

- 高層模塊(穩(wěn)定)不應(yīng)該依賴于低層模塊(變化),二者都應(yīng)該依賴于抽象(穩(wěn)定)

- 抽象(穩(wěn)定)不應(yīng)該依賴于實現(xiàn)細(xì)節(jié)(變化),實現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象

貫穿幾乎所有的設(shè)計模式

2. 開放封閉原則(OCP)

- 對擴展開放,對更改封閉

類模塊應(yīng)該可擴展,但是不可修改

3. 單一職責(zé)原則(SRP)

一個類應(yīng)該僅有一個引起它變化的原因

變化變化的方向隱含類的責(zé)任

4. 里氏替換原則(LSP)

子類必須能夠替換它的基類(IS-A)

5. 接口隔離原則(ISP)

接口應(yīng)該小而完備

不應(yīng)該強迫客戶程序依賴它們不用的方法

備注:SOLID

6. 優(yōu)先使用對象組合而不是類繼承

- 類繼承通常為“白箱復(fù)用”,對象組合通常為“黑箱復(fù)用”

- 繼承在某種程度上破壞了封裝性,子類父類耦合度高

- 而對象組合則只要求被組合的對象具有良好定義的接口,耦合度低

7. 封裝變化點

使用封裝來創(chuàng)建對象之間的分界層

8. 針對接口編程,而不是針對實現(xiàn)編程

- 不將變量類型聲明為某個特定的具體類,而是聲明成某個接口。

- 客戶程序無需獲知對象的具體關(guān)系,只需要知道對象所具有的接口

- 減少系統(tǒng)中各部分的依賴關(guān)系,從而實現(xiàn)“高內(nèi)聚,低耦合”的類型設(shè)計方案

接口標(biāo)準(zhǔn)化


將設(shè)計原則提升為設(shè)計經(jīng)驗

1. 設(shè)計習(xí)語:描述與特定編程語言相關(guān)的低層模式,技巧,慣用法

effective c++講的就是這一類的

2. 設(shè)計模式:主要描述類與相互通信對象之間的組織關(guān)系,包括它們的角色,職責(zé),協(xié)作方式等方面

主要解決變化中的復(fù)用問題

3. 架構(gòu)模式:描述系統(tǒng)中與基本結(jié)構(gòu)組織關(guān)系密切的高層模式,包括子系統(tǒng)劃分,職責(zé),以及如何組織它們之間關(guān)系的規(guī)則

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

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

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