1.定義
一個類只做一件事搪柑,只有一個原因引起變化
2.作用
- 降低類的復(fù)雜度
- 降低變更帶來的風(fēng)險
- 提高系統(tǒng)維護(hù)性
3.應(yīng)用
下面是一個畫圖接口
public interface Drawing {
//畫正方形
public void DrawSquare();
//畫三角形
public void DrawTriangle();
//畫一條線
public void DrawLine();
//畫一個曲線
public void DrawCurve();
}
這個接口的設(shè)計有問題嗎?我說是沒有問題的牌废。單一職責(zé)原則要求一個接口或類只有一個原因引起變化酿矢,一個接口或類只有一個職責(zé)樱衷,只負(fù)責(zé)一件事情创译。畫圖接口也確實是按照單一職責(zé)去設(shè)計只負(fù)責(zé)畫,里面的方法也都是draw的相關(guān)方法县爬,如果在需求不會變化或者變化的可能性比較小煌集,那么這種設(shè)計就是合理的。但實際情況我們知道捌省,隨著業(yè)務(wù)的不斷增加苫纤,產(chǎn)品的腦洞越來越大下次需要增加,圓形,橢圓形卷拘,二階三階貝塞爾曲線等等喊废,這個時候我們就需要改,有時候可能還會牽扯到連帶關(guān)系也要發(fā)現(xiàn)改動栗弟。所以更好的方式是按照draw的類型進(jìn)行拆分污筷。拆分成DrawFigure專門用來處理畫圖形,DrawPoints專門用來處理畫線條
public interface DrawFigure {
//畫正方形
public void DrawSquare();
//畫三角形
public void DrawTriangle();
}
public interface DrawPoints {
//畫一條線
public void DrawLine();
//畫一個曲線
public void DrawCurve();
}
這樣做更符合了單一職責(zé)原則乍赫,假如下次增加了其他圖形的功能瓣蛀,經(jīng)過我們的拆分接口之后我們只需要在處理圖像接口中新增加就行,比起最開始來說降低了變更的風(fēng)險和復(fù)雜度雷厂,不用去修改所有實現(xiàn)了了畫圖接口Drawing的實例
4.總結(jié)
不管是接口或者是類還是方法都建議遵循單一職責(zé)原則惋增,但是具體要細(xì)化到哪一步,還是要取決于需求和業(yè)務(wù)的復(fù)雜度改鲫。