天天看點

面向對象設計原則-04單一職責原則面向對象設計原則-04單一職責原則

面向對象設計原則-04單一職責原則

單一職責原則也是面向對象設計原則中的一條,下面我們就來詳細地對其進行介紹。

單一職責原則的定義

單一職責原則(Single Responsibility Principle,SRP)又稱單一功能原則,由羅伯特·C.馬丁(Robert C. Martin)于《靈活軟體開發:原則、模式和實踐》一書中提出的。這裡的職責是指類變化的原因,單一職責原則規定一個類應該有且僅有一個引起它變化的原因,否則類應該被拆分(There should never be more than one reason for a class to change)。

該原則提出對象不應該承擔太多職責,如果一個對象承擔了太多的職責,至少存在以下兩個缺點:

1、一個職責的變化可能會削弱或者抑制這個類實作其他職責的能力;

2、當用戶端需要該對象的某一個職責時,不得不将其他不需要的職責全都包含進來,進而造成備援代碼或代碼的浪費。

單一職責原則的優點

單一職責原則的核心就是控制類的粒度大小、将對象解耦、提高其内聚性。如果遵循單一職責原則将有以下優點。

1、降低類的複雜度。一個類隻負責一項職責,其邏輯肯定要比負責多項職責簡單得多。

2、提高類的可讀性。複雜性降低,自然其可讀性會提高。

3、提高系統的可維護性。可讀性提高,那自然更容易維護了。

4、變更引起的風險降低。變更是必然的,如果單一職責原則遵守得好,當修改一個功能時,可以顯著降低對其他功能的影響。

單一職責原則的實作方法

單一職責原則是最簡單但又最難運用的原則,需要設計人員發現類的不同職責并将其分離,再封裝到不同的類或子產品中。而發現類的多重職責需要設計人員具有較強的分析設計能力和相關重構經驗。下面以大學學生工作管理程式為例介紹單一職責原則的應用。

【例1】大學學生工作管理程式。

分析:大學學生工作主要包括學生生活輔導和學生學業指導兩個方面的工作,其中生活輔導主要包括班委建設、出勤統計、心理輔導、費用催繳、班級管理等工作,學業指導主要包括專業引導、學習輔導、科研指導、學習總結等工作。如果将這些工作交給一位老師負責顯然不合理,正确的做 法是生活輔導由輔導員負責,學業指導由學業導師負責。

注意:單一職責同樣也适用于方法。一個方法應該盡可能做好一件事情。如果一個方法處理的事情太多,其顆粒度會變得很粗,不利于重用。

繼續閱讀