入門設計模式之工廠模式(一)

一、描述

        在前面一篇《入門設計模式之簡單工廠模式》我們通過了傳不同的參數然後在switch裏去判斷要具體生成哪個產品,在小項目裏這樣做是沒什麼太大毛病,那比如我們做的是天貓京東這樣的項目呢?商品有千千萬萬,那這個switch是不是變得非常可怕,爲了解決頻繁修改代碼和代碼臃腫 ,那麼就需要我們引入工廠模式了。

二、優劣勢


優點:克服了簡單工廠違背開放-封閉原則的缺點,又保留了封裝對象創建過程的優點,降低客戶端和工廠的耦合性,所以說“工廠             模式”是“簡單工廠模式”的進一步抽象和推廣。
缺點:每增加一個產品,相應的也要增加一個子工廠,加大了額外的開發量。

三、需求

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


四、不使用設計模式

         簡單工廠的例子:https://blog.csdn.net/dicunsi2939/article/details/103922023

五、使用設計模式

        通過創建不同產品的工廠,並且實現它。

        6個類,

        MouseBase.cs  -鼠標基類  

        HpMouse.cs --惠普鼠標類

        DellMouse.cs -戴爾鼠標類

        IMouseFactory.cs -工廠基類

        HpMouseFactory.cs -惠普鼠標工廠

        DellMouseFactory.cs -戴爾鼠標工廠

/// <summary>
/// 鼠標工廠基類
/// </summary>
public interface IMouseFactory
{
    IMouse CreateMouse();
}

/// <summary>
/// 戴爾鼠標工廠
/// </summary>
public class DellMouseFactory : IMouseFactory
{
    public IMouse CreateMouse()
    {
        return new DellMouse();
    }
}

/// <summary>
/// 惠普鼠標工廠
/// </summary>
public class HpMouseFactory : IMouseFactory
{
    public IMouse CreateMouse()
    {
        return new HpMouse();
    }
}

/// <summary>
/// 鼠標接口
/// </summary>
public interface IMouse
{
    void Show();
}

/// <summary>
/// 戴爾鼠標
/// </summary>
public class DellMouse : IMouse
{
    public void Show()
    {
        Debug.Log("戴爾鼠標,你值得擁有!");
    }
}

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

//客戶端調用
public static void main(string[] args)
{
     IMouseFactory factory = new DellMouseFactory();
     IMouse mouse1 = factory.CreateMouse();
     mouse1.Show();

     factory = new DellMouseFactory();
     IMouse mouse2 = factory.CreateMouse();
     mouse2.Show();
}

運行結果

小結:我們把每個鼠標都給它創建了一個工廠,它的功能就算創建相對應的產品,我們在客戶端原來在簡單工廠的時候傳的是字符串,這邊我們穿的是工廠類,這樣有明確的工廠對象比字符串穩定了很多,然後創建產品 也是在各自對應的工廠進行,取消了原來switch的判斷機制,並且還可以擴展在各自工廠創建時做一些對應的工作。

六、設計圖

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

 

//ToDo 畫圖......

七、進階講解

         這就是工廠模式與簡單工廠的區別,理解完工廠模式後,我們再引入問題,當我們要增加惠普鍵盤,這個時候怎麼辦,再來個惠普鍵盤類和惠普鍵盤工廠類?這可就錯了那有十幾個品牌,豈不是要寫到累,所以就需要引入我們的抽象工廠模式了,詳情看後面的篇章。

八、總結   

         一個產品對應一個工廠類,就是這樣。

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

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