一、概述
1.1 定義
單一職責原則(Single Responsibility Principle):
不要存在多於一個導致類變更的原因。
核心思想:系統中的每一個對象都應該只有一個單獨的職責,而所有對象所關注的就是自身職責的完成。
1.2 難點
單一職責,何為單一職責,職責的划分?
關於單一職責,我的理解是一類相似的事物,它們擁有唯一一個共同父集。比如數據庫的增刪改查,我們可以將其理解成一種職責,即對數據的基本操作。
職責的划分,主要根據不同的角度划分,比如,
1、從類組成,划分為屬性的操作,和行為操作兩種。
2、從數據庫操作的不同作用,划分為數據庫的連接操作,和增刪改查基本操作。
二、實例說明
在開發項目時,開發人員設計接口的時候會有些問題,比如我們設計用戶接口類,有時為了方便原則,將其屬性操作以及行為操作都封裝在用戶接口類中。
上面這個例子,將業務對象和業務邏輯放在一起,使得接口有兩種職責,用戶類的年齡與身高,屬於業務對象,與之相應的方法主要負責用戶的屬性;而吃東西是業務邏輯,主要負責用戶的行為。因此業務對象和業務邏輯這兩種原因都可以引起用戶類的變化,發生多於一個導致類變更的原因的情況,違背了單一職責原則。
為了符合單一職責原則,我們將業務對象和業務邏輯這兩種原因分散開來,即可解決。
在java中數據庫操作中,根據不同職責划分類接口。
java.sql.Connection:Creates a Statement object for sending SQL statements to the database.
java.sql.Statement:Executes the given SQL statement, which returns a single ResultSet object.
單一職責原則,難點在於職責的划分,在實際中,我們盡量根據項目需求的不同角度去划分職責。
在某些時候不能遵守單一職責時,那就放心破壞吧,謹記教條是死的,生活是多變的。
比如:
Break Single Responsibility Principle
注意:
- 一個合理的類,應該僅有一個引起它變化的原因,即單一職責。
- 在沒有變化征兆的情況下應用SRP或其他原則是不明智的。
- 在需求實際發生變化時就應該應用SRP等原則來重構代碼。
參考:
1、單一職責原則


