入門設計模式之簡單工廠模式

一、描述

        這個不算23種設計模式裏面的,只是後面會講工廠模式,所以拿出來講下。由一個工廠管理類來控制需要生產什麼產品,提供一個生產的方法給客戶端使用,客戶端根據參數調用來獲得不同的產品。工廠類是整個模式的關鍵所在。它包含必要的判斷邏輯,能夠根據外界給定的信息,決定究竟應該創建哪個具體類的對象。

二、優劣勢


優點:用戶在使用時可以直接根據工廠類去創建所需的實例,而無需瞭解這些對象是如何創建以及如何組織的。有利於整個軟件            體系結構的優化。
缺點:一旦這個工廠類出現問題,整個客戶端就蹦了,畢竟所有地方生產都由它實現。也不容易擴展,每次新曾產品時都得修改            生產產品的判斷條件。

三、需求

      生產鼠標,有2個品牌,惠普和戴爾。


四、不使用設計模式

        都不考慮設計了,直接擼代碼。

        3個類,

        MouseBase.cs  -鼠標基類  

        HpMouse.cs --惠普鼠標類

        DellMouse.cs -戴爾鼠標類

//鼠標基類
public abstract class MouseBase
{  
    public abstract void Show();
}

//惠普鼠標
public class HpMouse : MouseBase
{
    public override void Show()
    {
        Debug.Log("惠普鼠標老品牌值得信賴!");
    }
}

//戴爾鼠標
public class DellMouse : MouseBase
{   
    public override void Show()
    {
        Debug.Log("戴爾鼠標帶給你不一樣的驚喜!");
    }
}

//客戶端調用
public static void main(string[] args)
{
    MouseBase mouse1 = new HpMouse();
    mouse1.Show();

    MouseBase mouse2 = new DellMouse();
    mouse2.Show();
}

運行結果

小結:這樣一看好像是沒什麼問題,需要什麼牌子的鼠標就new對應的類就好了,但是要考慮一點,一般軟件或者遊戲裏生成鼠標對象可不只是一個地方,可能達到幾十處,當你要查看具體哪些地方生成過就會顯得特別的麻煩,怎麼解決呢,我們往下看。

五、使用設計模式

        通過添加工廠類,生成產品的工作交給它來負責。   

        3個類,

        MouseBase.cs  -鼠標基類  

        HpMouse.cs --惠普鼠標類

        DellMouse.cs -戴爾鼠標類

        FactoryManager.cs -工廠類

//鼠標基類
public abstract class MouseBase
{  
    public abstract void Show();
}

//惠普鼠標
public class HpMouse : MouseBase
{
    public override void Show()
    {
        Debug.Log("惠普鼠標老品牌值得信賴!");
    }
}

//戴爾鼠標
public class DellMouse : MouseBase
{   
    public override void Show()
    {
        Debug.Log("戴爾鼠標帶給你不一樣的驚喜!");
    }
}

//工廠,控制生產什麼鼠標
public class FactoryManager
{
    //單例模式
    private static FactoryManager _instance;
    public static FactoryManager Instance
    {
        get {
            if (_instance==null)
            {
                _instance = new FactoryManager();               
            }
            return _instance;
        }
    }

    //創建一個鼠標,根據品牌名稱
    public MouseBase CreateMouse(string str)
    {
        MouseBase mouse = null;
        switch (str)
        {
            case "惠普":
                mouse = new HpMouse();
                break;

            case "戴爾":
                mouse = new DellMouse();
                break;    ;
        }
        return mouse;
    }
}

//客戶端調用
public static void main(string[] args)
{
     MouseBase mouse1 = FactoryManager.Instance.CreateMouse("惠普");
     mouse1.Show();

     MouseBase mouse2 = FactoryManager.Instance.CreateMouse("戴爾");
     mouse2.Show();
}

運行結果

小結:我們把生成鼠標的方式抽象出來,做一個工廠,然後客戶端每次要生成鼠標的時候只需要調用這個類,再根據參數來生成對應的鼠標就可以了,要看哪個地方有生成鼠標,只需要查看這個類在哪被引用就行。

六、設計圖

通過學習,我們瞭解到了簡單工廠模式的應用,我們把剛剛的實現方式畫出來。

 

七、進階講解

         這是最基本的簡單工廠,進階一點的是工廠模式,抽象工廠模式,詳情看另外的篇章。

八、總結   

        什麼時候用簡單工廠呢,因爲每次添加產品都必須修改工廠類裏的判斷條件,所以當產品類型比較固定不太會變化的時候適合用 ,比如生成男人和或者女人,總不會再給你提好幾個另類的東東了吧。

覺得有用就留下評論吧^-^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章