SOLID是面向對象設計和編程(OOD&OOP)中幾個重要編碼原則
即:SRP單一責任原則;
OCP開放封閉原則;
LSP里氏替換原則;
ISP接口分離原則;
DIP依賴倒置原則。
1. 單一責任原則(SRP)
當需要修改某個類的時候原因有且只有一個。換句話說就是讓一個類只做一種類型責任,當這個類需要承當其他類型的責任的時候,就需要分解這個類。 類被修改的幾率很大,因此應該專注於單一的功能。如果你把多個功能放在同一個類中,功能之間就形成了關聯,改變其中一個功能,有可能中止另一個功能,這時就需要新一輪的測試來避免可能出現的問題,非常耗時耗力。
2. 開放封閉原則(OCP)
軟件實體應該是可擴展,而不可修改的。也就是說,對擴展是開放的,而對修改是封閉的。這個原則是諸多面向對象編程原則中最抽象、最難理解的一個。
(1)通過增加代碼來擴展功能,而不是修改已經存在的代碼。
(2)若客戶模塊和服務模塊遵循同一個接口來設計,則客戶模塊可以不關心服務模塊的類型,服務模塊可以方便擴展服務(代碼)。
(3)OCP支持替換的服務,而不用修改客戶模塊。
3. 里氏替換原則(LSP)
當一個子類的實例應該能夠替換任何其超類的實例時,它們之間才具有is-A關系
客戶模塊不應關心服務模塊的是如何工作的;同樣的接口模塊之間,可以在不知道服務模塊代碼的情況下,進行替換。即接口或父類出現的地方,實現接口的類或子類可以代入。
4. 接口分離原則(ISP)
不能強迫用戶去依賴那些他們不使用的接口。換句話說,使用多個專門的接口比使用單一的總接口總要好。
客戶模塊不應該依賴大的接口,應該裁減為小的接口給客戶模塊使用,以減少依賴性。如Java中一個類實現多個接口,不同的接口給不用的客戶模塊使用,而不是提供給客戶模塊一個大的接口。
5. 依賴注入或倒置原則(DIP)
1. 高層模塊不應該依賴於低層模塊,二者都應該依賴於抽象
2. 抽象不應該依賴於細節,細節應該依賴於抽象
這個設計原則的亮點在於任何被DI框架注入的類很容易用mock對象進行測試和維護,因為對象創建代碼集中在框架中,客戶端代碼也不混亂。有很多方式可以實現依賴倒置,比如像AspectJ等的AOP(Aspect Oriented programming)框架使用的字節碼技術,或Spring框架使用的代理等。
(1).高層模塊不要依賴低層模塊;
(2).高層和低層模塊都要依賴於抽象;
(3).抽象不要依賴於具體實現;
(4).具體實現要依賴於抽象;
(5).抽象和接口使模塊之間的依賴分離。
具體可參見:http://www.cnblogs.com/lanxuezaipiao/archive/2013/06/09/3128665.html有詳細例子說明