面向對象設計之SRP(單一職責)原則

SRP設計原則面向對象類設計的第一個原則,最優先考慮的因素單元測試

  一個類應該有且僅有一個職責。所謂一個類的職責是指引發該類變化的緣由,若是一個類具備一個以上的職責,那麼就會有多個不一樣的緣由 引發該類變化,其實就是耦合了多個互不相關的職責,就會下降這個類的內聚性。 測試

也就是說每個類只作一件事,那麼什麼叫作「一件事」?編碼

  好比說一個學生信息管理類,這個類有「添加學生信息」、 「查詢學生信息」、 「修改學生信息」、 「刪除學生 信息」,那麼這是4件事情,仍是一件事情呢?看起來好像是4個事情,但稍有經驗的朋友應該都知道,這4個事情絕大部分狀況下都是一個類來實現的, 而不是分紅4個類!spa

好比說,我是一個程序猿,個人職責應該是「寫程序」,但寫程序有不少事情,例如:編碼,單元測試、 系統測試,bug修復,開會,寫文檔……翻譯

再好比說,個人BOSS是一個管理者,他的職責是「管理程序猿」,他也有不少工做,例如:制定計劃, 團隊建設、開會、協調資源、寫文檔……設計

又好比說,我是一個快遞員,也有不少工做:分包、快遞、收款、開會……對象


  這些職責其實都不是咱們本身定義的,而是公司或者部門或者組織給咱們安排工做的時候定義的,也就是說:「職責」是站在他人的角度來定義的,而不是本身定義的。繼承

通過對咱們本身的職責的分析,咱們能夠得出兩個關於職責的重要結論: 資源

1)職責是站在他人的角度來定義的 文檔

2)職責不是一件事,而是不少事情,但這些事情都是和職責緊密相關的


對應到面向對象設計領域,咱們能夠說一個類的職責應該以下定義:

1)類的職責是站在其它類的角度來定義的

2)類的職責包含多個相關功能

  所以,SRP能夠翻譯成「一個類只負責一組相關的事情」,對應到代碼中就是:一個類有多個方法,這些方法是相關。

 

注:SRP不能應用於聚合類,因此還有一個原則就是:優先考慮對象組合,而不是類繼承

相關文章
相關標籤/搜索