面象物件設計6大原則之一:單一職責原則

茅坤寶駿氹發表於2018-05-05

轉載自 面象物件設計6大原則之一:單一職責原則


單一職責原則SRP),The Single Responsibility Principle


定義

一個類的修改只能有一個被修改的原因。


通俗地講,就是一個類只能負責一個職責,修改一個類不能影響到別的功能,也就是說只有一個導致該類被修改的原因。我們寫程式碼的都知道盡量要做到低耦合、高內聚的特性,單一職責原則正是保證了類與類之間的低耦合性。一個類如果承擔過多的職責,就會有很多原因來導致這個類的被修改,就有很大可能性影響到別的功能。


單一職責原則,看起來是一個非常簡單的原則,但真正實踐起來也並非易事,因為職責的聯合在實際當中是經常遇到的事,也不能隨便地去拆分類去適配單一職責模式,所以如何從這些聯合的職責中合理地把職責分隔出來更合適的遵守單一職責原則要好好考慮。


看看下面這這個介面是否符合單一職責原則呢?


public interface UserInterface {


    void saveUser(User user);


    User getUser(long id);


    void updateUserBalance(long id, BigDecimal balance);


    BigDecimal getUserBalance(long id);


}


這是一個使用者介面,提供四個方法:儲存使用者、獲取使用者、更新使用者餘額、獲取使用者餘額,很顯然使用者個人資訊與使用者的賬戶餘額是兩回事,這樣設計在一起耦合非常高,不利於擴充套件,也不符合單一職責原則,我們可以把它折分成兩個,一個為使用者資訊介面,一個賬戶介面,如下


public interface UserInterface {


    void saveUser(User user);


    User getUser(long id);


}


public interface AccountInterface {


    void updateUserBalance(long id, BigDecimal balance);


    BigDecimal getUserBalance(long id);


}


這樣分開來,是不是就符合了單一職責原則,類的複雜性和耦合性也降低了,即使使用者介面或賬戶介面加減介面也不影響別的介面實現類。


所以,單一職責原則可以總結為以下優勢:

1、低耦合性,影響範圍小。

2、類複雜度降低,職責分明,提高了可讀性。

3、職責單一,利於維護。



相關文章