一、定義
Single Responsibility Principle,簡稱SRP,類的職責要單一,不要講過多的職責功能放到一個類中。
一個類只負責一個功能領域中的相應職責。
如果一個類的所做的事情很多,就難以實現複用,而且各種職責的耦合度會變高。所以,應該將不同職責封裝在不同類中,不同的功能變化封裝在不同類中。這樣,接口的功能比較專一,可讀性、複用性都很高,也容易維護。
二、設計思路
假設我們要設計一個系統,有如下登錄、註冊、支付等功能,類結構如下:
/**
* 總控制類
*/
@Controller
public class userController{
/**
* 登錄
*/
public void login(){
// TODO
}
/**
* 註冊
*/
public void register(){
// TODO
}
/**
* 支付(支付寶)
*/
public void aliPay(){
// TODO
}
/**
* 支付(微信)
*/
public void wXPay(){
// TODO
}
}
如果我們按上面的類進行設計,則各種功能都混雜在一起,代碼可讀性很差,後期維護成本也很大。
所以我們要對UserController進行拆解,實現高內聚、低耦合:
public class LoginController(){}
public class registerController(){}
public class payController(){
// TODO 支付類可以定義一個公共接口,分別有支付寶、微信支付的服務的實現:aliPayService\wXPayService
}
此外,關於職責單一的理解,我們還可以延伸到接口層面,也就是一個接口內部只做一種單一職責的功能,儘量不要將一個接口做成大雜燴。否則,後期同樣會帶來很大的運維成本。
END.