1. 程式人生 > >solid原則

solid原則

alt 父類 面向對象 功能 設計 必須 調用方法 pan -i

1. SRP(單一責任原則)

定義:當需要修改某個類的時候原因有且只有一個。換句話說就是讓一個類只做一種類型責任,當這個類需要承當其他類型的責任的時候,就需要分解這個類。 類被修改的幾率很大,因此應該專註於單一的功能。如果你把多個功能放在同一個類中,功能之間就形成了關聯,改變其中一個功能,就需要重新測試類中所有的功能。

上面這個類包含三個方法,都是查詢客戶相關信息,並且在改變其中一個方法並不會影響到其他的方法,因此我覺得是符合單一職責的。

對於一個類中編寫了多個功能方法時,如果這幾個功能方法相互依賴,又或者共享參數,又具備改變參數的功能,這樣設計出的類,如果改變其中一個功能,就會影響其他的功能,導致所有的功能都需要重新測試,因此違反了單一職責。

我比較贊同面向對象葵花寶典上的說法,一個類只負責一組相關的事情,一個類中可以有多個方法,這些方法是相關的。SRP也不是適用於所有的類中,只適用於基礎類。

2. OCP(開閉原則)

c裏的函數在java裏就是方法,開閉原則,我的理解就是對提供方法的一方允許擴展,對調用方法的一方不允許修改。

1.比如,定義好了一個方法,另一個方調用了這個方法,在修改這個方法的同時要保證調用方不需要修改代碼。此時就需要保證方法的命名參數返回值等不可以改變。
技術分享圖片

上圖是在開發中定義的一個方法,並沒有編寫方法實現。在開發過程為了提高編碼的效率,會經常先定義好接口方法,先讓上遊調用該方法然後進行開發,這樣兩方可以 同時開發。這裏也充分應用了OCP原則,只修改方法的實現,而不修改方法的命名參數返回值等。要是反復修改方法的命名等,會導致上遊調用方也要修改,極大的影響了效率。

3. LSP(裏氏替換原則)

通俗的定義就是子類必須實現或者繼承父類所有的公有方法,入參必須一樣,輸出必須不比父類少。LSP就是指子類可以完全替換父類被調用方使用。

4. ISP( 接口分離原則)

不能強迫用戶去依賴那些他們不使用的接口。換句話說,使用多個專門的接口比使用單一的總接口總要好。 ?

客戶模塊不應該依賴大的接口,應該裁減為小的接口給客戶模塊使用,以減少依賴性。如Java中一個類實現多個接口,不同的接口給不用的客戶模塊使用,而不是提供給客戶模塊一個大的接口。

比如上圖,是按照功能設計了兩個接口,而不是將所有的方法放在一個接口裏,較低了耦合。

5. DIP(依賴註入或倒置原則)

(1).高層模塊不要依賴低層模塊;
(2).高層和低層模塊都要依賴於抽象;
(3).抽象不要依賴於具體實現;
(4).具體實現要依賴於抽象;
(5).抽象和接口使模塊之間的依賴分離。

solid五大原則各自的側重點不同,SRP(單一職責)用於類的設計。OCP(開閉原則)它是面向對象開發過程中總得指導思想。LSP(裏氏替換原則)用於指導類繼承的設計。ISP(接口隔離原則)用於指導接口的設計。DIP(依賴註入原則)用於指導如何抽象。

solid原則