一、定義
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.