變化是復(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ī)則