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