設計模式六大原則——單一職責原則(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