閱讀795 返回首頁    go 小米 go 小米6


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

  上一篇:go regsvr32 注冊.dll的用法
  下一篇:go 龐果網之素因子集合