1)單一職責(zé)原則(single responsibility principle, SRP)
就一個(gè)類而言,有且僅有一個(gè)引起它變化的原因。
如果你能夠想到多于一個(gè)的動(dòng)機(jī)去改變一個(gè)類,那么這個(gè)類就具有多于一個(gè)的職責(zé)。
2)開放封閉原則(open closed principle, OCP)
軟件實(shí)體(類,模塊,函數(shù)……)應(yīng)該是可以擴(kuò)展的,但是不可修改的。
1、對(duì)于擴(kuò)展是開放的。
2、對(duì)于修改是封閉的。
對(duì)實(shí)體進(jìn)行擴(kuò)展時(shí),不必改動(dòng)軟件的源代碼或者二進(jìn)制代碼。關(guān)鍵在于抽象。
模式:STRATEGY、TEMPLATE METHOD、BRIDGE
3)Liskov替換原則(Liskov substitution priciple, LSP)
子類型必須能夠替換掉它們的基類型。IS-A關(guān)系。
基于契約的設(shè)計(jì)、抽象出公共部分作為抽象基類的設(shè)計(jì)。
4)依賴倒置原則(dependence inversion principle, DIP)
a、高層模塊不應(yīng)該依賴于底層模塊,二者都應(yīng)該依賴于抽象。
b、抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。
層次化:所有結(jié)構(gòu)良好的面向?qū)ο髽?gòu)架都具有清晰的層次定義,每個(gè)層次通過一個(gè)定義良好的、受控的接口向外提供一組內(nèi)聚的服務(wù)。
依賴于抽象:建議不依賴于具體類,即程序中所有的依賴關(guān)系都應(yīng)該終止于抽象類或者接口。
1、任何變量都不應(yīng)該持有一個(gè)指向具體類的指針或者引用。
2、任何類都不應(yīng)該從具體類派生。
3、任何方法都不應(yīng)該覆寫它的任何基類中的已經(jīng)實(shí)現(xiàn)的方法。
抽象基類與模板類???
5)接口隔離原則(interface separate principle, ISP)
不應(yīng)該強(qiáng)迫用戶依賴于他們不用的方法。
1、利用委托分離接口。
2、利用多繼承分離接口。
典型的ADAPTER模式。