設計模式之美--單一職責原則

什麼是單一職責原則?

單一職責原則的英文是Single Responsibility Principle,簡稱SRP。其原始英文描述是:

A class or module should have a single responsibility.

一個類或者模塊應當只負責完成一個功能(或職責)。

舉個栗子:

在社交產品中,需設計一個UserInfo類來記錄用戶心信息:

public class UserInfo{
    private long userId;
    private String userName;
    private String email;
    private String telephone;
    private long createTime;
    private long lastLoginTime;

    private String provinceOfAddress; // 省
    private String cityOfAddress;    // 市
    private String regionOfAddress;    // 區
    private String detailedAddress;    // 詳細地址
    //... 其他屬性
}

在上述這個代碼樣例裏,UserInfo類中包含的均爲和用戶相關的屬性,比較滿足SRP原則。但有很多和地址信息相關的屬性,其實可以考慮拆分爲UserAddress類,後續在擴展如電商物流等模塊功能時,能更好的與UserInfo解耦。

單一職責的好處

單一職責原則,通過設計粒度小、功能單一的類,避免了將不相關的功能耦合在一起,提高了類的內聚性。同時,類依賴和被依賴的其他類也變少了,減少了代碼的耦合性。

但不可過多拆分類,如果拆分過細,反而會降低內聚性,影響代碼的可維護性。

如何判斷類職責是否單一?

這裏沒有一個具體的金科玉律,但從實際代碼開發經驗上,有一些可執行性的側面判斷指標,可供參考:

  • 類中的代碼行數、函數、或者屬性過多;

  • 類依賴的其他類過多

  • 私有方法過多

  • 類中大量的方法都是集中操作類中的幾個屬性

  • 比較難給類起一個合適的名字

回顧一下

單一職責原則的英文是Single Responsibility Principle,簡稱SRP。我們在設計類的時候,儘量避免設計大而全的類,要設計粒度小、功能單一的類,使得一個類只負責完成一個功能,這樣有利於提高代碼的複用性、可讀性、可維護性,實現代碼高內聚、低耦合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章