Unity入門設計模式之抽象工廠模式(二)

一、描述

        當一個產品族中的多個對象被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的對象。好比不同品牌下有各式各樣的商品。

二、優劣勢


優點:用戶在使用時可以直接根據工廠類去創建所需的實例,而無需瞭解這些對象是如何創建以及如何組織的。有利於整個軟件  體系結構的優化。
缺點:產品族擴展非常困難,要增加一個系列的某一產品,既要在抽象里加代碼,又要在具體的裏面加代碼。

三、需求

      生產鼠標,有2個品牌,惠普和戴爾,每個品牌都能成產鼠標和鍵盤。


四、使用其他設計模式

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

工廠模式:https://blog.csdn.net/dicunsi2939/article/details/103923644

如果我們這邊也使用工廠模式,那麼就會出現惠普鼠標工廠、惠普鍵盤工廠,那麼從名字來看就有點耦合了,都是惠普工廠,幹嘛還分鼠標和鍵盤,所以我們引用抽象工廠。

五、使用設計模式

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

        3個類,

        MouseBase.cs  -鼠標基類  

        HpMouse.cs -惠普鼠標類

        DellMouse.cs -戴爾鼠標類

        KeyBoardBase.cs  鍵盤基類  

        Hp KeyBoard.cs -惠普鍵盤類

        Dell KeyBoard.cs -戴爾鍵盤類

        FactoryBase.cs -抽象工廠基類

        HpFactory.cs -惠普工廠
        DellFactory.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 HpKeyBoard : KeyBoardBase
{
    public override void Show()
    {
        Debug.Log("惠普鍵盤!");
    }
}

//戴爾鍵盤
public class DellKeyBoard : KeyBoardBase
{
    public override void Show()
    {
        Debug.Log("戴爾鍵盤");
    }
}

//抽象工廠基類
public abstract class FactoryBase
{
    public abstract MouseBase CreateMouse();
    public abstract KeyBoardBase CreateKeyBoard();
}

//惠普工廠
public class HpFactory : FactoryBase
{
    public override KeyBoardBase CreateKeyBoard()
    {
        return new HpKeyBoard();
    }

    public override MouseBase CreateMouse()
    {
        return new HpMouse();
    }
}

//戴爾工廠
public class DellFactory : FactoryBase
{
    public override KeyBoardBase CreateKeyBoard()
    {
        return new DellKeyBoard();
    }

    public override MouseBase CreateMouse()
    {
        return new DellMouse();
    }
}

//客戶端調用
public static void main(string[] args)
{
    FactoryBase factory = new HpFactory();
    //生產惠普鼠標和鍵盤
    factory.CreateMouse();
    factory.CreateKeyBoard();

    factory = new DellFactory();
    //生產戴爾鼠標和鍵盤
    factory.CreateMouse();
    factory.CreateKeyBoard();
}

運行結果

小結:我們抽象除一個工廠基類,裏面是可生產的產品,然後每個品牌作爲一個工廠類去繼承它,這樣就把同一個品牌的產品合併到同一個工廠了。

六、設計圖

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

//沒什麼人看,就不畫了。

 

七、總結   

        工廠模式和抽象工廠的區分爲:是否有品牌多產品這一說。抽象工廠擴展起來比較麻煩,需要添加每個品牌的具體產品對象,也就是一個產品有幾個牌子就得寫幾個類,然後還得去工廠類里加上創建得方法。但不耦合就是了。

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

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