單一職責原則
基本介紹
單一職責原則(Single Responsibility Principle, SRP),用來控制類的粒度大小,一個類只負責一個功能領域中的相應職責,在軟件系統種,一個類承擔的職責越多,它被複用的可能性就越小,而且一個類承擔的職責過多,就相當於將這些職責耦合在一起,當其中一個職責變化時,可能會影響其他職責的運作,因此要將這些職責進行分離,將不同的職責封裝在不同的類中,即將不同的變化原因封裝在不同的類中,如果多個職責總是同時發生改變則可以將它們封裝在同一類中。單一職責原則是實現高內聚、低耦合的指導方針。
代碼示例
下面通過一個例子來更好的理解單一職責原則:
public class CustomerData {
/**
* 連接數據庫
*/
public void connectionDataBase(){
}
/**
* 客戶信息list
*/
public void listCustomer(){
}
}
從上述代碼可以看到有一個CustomerData
類,擁有connectionDataBase
和listCustomer
兩個方法,connectionDataBase
是用來連接數據庫,而listCustomer
是用來獲取客戶信息的,兩個方法分別負責不同領域的職責。如果在其他類種也需要連接數據庫或者查詢客戶信息時,則很難實現代碼重用。無論是修改數據庫連接方式或者修改客戶信息查詢方法,都會引起該類的變更,違反了單一職責的宗旨。
下面我們來對CustomerData
類進行重構,以下是重構後的代碼:
public class CustomerData {
/**
* 客戶信息list
*/
public void listCustomer(){
}
}
public class DataBaseUtils {
/**
* 連接數據庫
*/
public void connectionDataBase(){
}
}
我們將connectionDataBase
方法獨立出來了,放到了DataBaseUtils
類中,用來進行數據庫相關的操作,CustomerData
類保留了listCustomer
方法,用來獲取客戶數據。經過一番重構之後,可以看到職責更加清晰了,無論如何修改,都不會影響到對方。