設計模式六大原則——單一職責原則(SRP)
定義
就一個類而言,應該僅有一個引起它變化的原因。通俗的說,一個類隻負責一項職責。
問題的由來
手機的功能多,但是每一項的功能都不強:
拍攝功能——>專業的攝像機和照相機
手機遊戲——>PSP
網絡攝像頭——>專業攝像頭
GPS功能——>專業GPS導航係統
每一個職責都是一個變化的軸線,當需求變化時會反映為類的職責的變化,如果一個類的承擔的職責多於一個,那麼引起她變化的原因就有多個,一個職責的變化可能會削弱或者抑製這個類完成其他職責的能力,從而導致脆弱的設計。
解決方案
遵循單一職責原則。分別建立兩個類T1、T2,使T1完成職責P1功能,T2完成職責P2功能。這樣,當修改類T1時,不會使職責P2發生故障風險;同理,當修改T2時,也不會使職責P1發生故障風險。
示例

public interface Program
{
void draw(); //繪製圖形
void area(); //計算麵積
}
public class DrawGraph implements Program
{
public void draw()
{
System .Out.PrintIn("繪製圖形");
}
public void area(){}
}
public class AreaCount implements Program
{
public void draw(){}
public void area()
{
System .out.printIn("計算麵積");
}
}
}
以上 圖形計算程序隻使用了正方形的Area()方法,永遠不會使用Draw()方法,而它卻跟Draw方法關聯了起來。這違反了單一原則,如果未來因為圖形繪製程序導致Draw()方法產生了變化,那麼就會影響到本來毫不關係的圖形計算程序。
應該把接口改成2個,將不同的職責分配給不同的類,使單個類的職責盡量單一,就隔離了變化,這樣他們也不會互相影響了。
public interface Draw
{
void draw(); //繪製圖形
}
public interface Area
{
void area(); //計算麵積
}
然後分別實現接口,如下:

最後更新:2017-04-03 12:56:29