工廠模式(Factory)

1、簡單工廠
2、工廠方法
3、抽象工廠

簡單工廠和工廠方法這倆個設(shè)計模式不做詳細(xì)介紹,請各位看官自行百度,有大量的解釋。再次我簡單引用一下其他博客主對這三種模式的理解。

引言

簡單工廠、工廠方法、抽象工廠都屬于設(shè)計模式中的創(chuàng)建型模式。其主要功能都是幫助我們把對象的實例化部分抽象取了出來,優(yōu)化了系統(tǒng)的架構(gòu),并且增強了系統(tǒng)的擴展性。此篇博客是筆者對學(xué)完這三種模式之后一個小小的總結(jié)

簡單工廠

簡單工廠模式的工廠類一般是使用靜態(tài)方法,通過接收的參數(shù)不同來返回不同的對象實例。不修改代碼的話,是無法擴展的
優(yōu)點:客戶端可以免除直接創(chuàng)建產(chǎn)品對象的責(zé)任,而僅僅是“消費”產(chǎn)品。簡單工廠模式通過這種做法實現(xiàn)了對責(zé)任的分割
缺點:由于工廠類集中了所有實例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了

工廠方法

工廠方法是針對每一種產(chǎn)品提供一個工廠類。通過不同的工廠實例來創(chuàng)建不同的產(chǎn)品實例。在同一等級結(jié)構(gòu)中,支持增加任意產(chǎn)品
優(yōu)點:允許系統(tǒng)在不修改具體工廠角色的情況下引進新產(chǎn)品
缺點:由于每加一個產(chǎn)品,就需要加一個產(chǎn)品工廠的類,增加了額外的開發(fā)量

抽象工廠

抽象工廠是應(yīng)對產(chǎn)品族概念的。應(yīng)對產(chǎn)品族概念而生,增加新的產(chǎn)品線很容易,但是無法增加新的產(chǎn)品。比如,每個汽車公司可能要同時生產(chǎn)轎車、貨車、客車,那么每一個工廠都要有創(chuàng)建轎車、貨車和客車的方法
優(yōu)點:向客戶端提供一個接口,使得客戶端在不必指定產(chǎn)品具體類型的情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象
缺點:增加新的產(chǎn)品等級結(jié)構(gòu)很復(fù)雜,需要修改抽象工廠和所有的具體工廠類,對“開閉原則”的支持呈現(xiàn)傾斜性

以上是對三種方法的介紹和優(yōu)缺點描述,接下來我們使用一個實例來說明抽象工廠的創(chuàng)建

設(shè)計說明

案例如下,手機廠商擁有屏幕和主板這倆條生產(chǎn)線,不同的手機廠商生產(chǎn)規(guī)格不同的產(chǎn)品(小米公司和蘋果公司)
我們進行分析,倆家手機廠商,倆條生產(chǎn)線生產(chǎn)倆種設(shè)備

1

定義如下,首先我們定義一個抽象的工廠,這個工廠的方法包含
1、創(chuàng)建屏幕
2、創(chuàng)建主板
這個抽象工廠的作用主要是讓繼承他的子類 實現(xiàn)這倆個抽象方法

/// <summary>
    /// 抽象工廠類:提供創(chuàng)建不同品牌的手機屏幕和手機主板
    /// </summary>
    public abstract class AbstractFactory
    {
        //工廠生產(chǎn)屏幕
        public abstract Screen CreateScreen();
        //工廠生產(chǎn)主板
        public abstract MotherBoard CreateMotherBoard();
    }

2

定義手機屏幕和手機主板的的抽象方法,因為不同的廠商對產(chǎn)品規(guī)格不同,所以定義好抽象的基類,再交由各不同的廠商去實現(xiàn)功能,實現(xiàn)如相

/// <summary>
    /// 屏幕抽象類:提供每一品牌的屏幕的繼承
    /// </summary>
    public abstract class Screen
    {
        public abstract void print();
    }

/// <summary>
    /// 主板抽象類:提供每一品牌的主板的繼承
    /// </summary>
    public abstract class MotherBoard
    {
        public abstract void print();
    }

不同廠商對屏幕和主板的實現(xiàn)類如下:

      /// <summary>
    /// 蘋果手機屏幕
    /// </summary>
    public class AppleScreen:Screen
    {
        public override void print()
        {
            Console.WriteLine("蘋果手機屏幕!");
        }
    }
    /// <summary>
    /// 蘋果手機主板
    /// </summary>
    public class AppleMotherBoard:MotherBoard
    {
        public override void print()
        {
            Console.WriteLine("蘋果手機主板!");
        }
    }

    /// <summary>
    /// 小米手機屏幕
    /// </summary>
    public class XiaoMiScreen:Screen
    {
        public override void print()
        {
            Console.WriteLine("小米手機屏幕!");
        }
    }

    /// <summary>
    /// 小米手機主板類
    /// </summary>
    public class XiaoMiMotherBoard :MotherBoard
    {
        public override void print()
        {
            Console.WriteLine("小米手機主板!");
        }

3

經(jīng)過上面?zhèn)z個步驟我們得到了不同商品的實現(xiàn),現(xiàn)在我們還缺少一個東西,就是不同的商家對自己商品的獲取實現(xiàn)
此時我們應(yīng)該建立不同商家的工廠類,有倆個商家,我們就建立倆個工廠類,工廠中分別實現(xiàn)創(chuàng)建自己產(chǎn)品
實現(xiàn)的工廠要繼承AbstractFactory

    /// 小米手機工廠類
    /// </summary>
    public class XiaoMiFactory : AbstractFactory
    {
        /// <summary>
        /// 生產(chǎn)小米手機屏幕
        /// </summary>
        /// <returns></returns>
        public override Screen CreateScreen()
        {
            return new XiaoMiScreen();
        }

        /// <summary>
        /// 生產(chǎn)小米手機主板
        /// </summary>
        /// <returns></returns>
        public override MotherBoard CreateMotherBoard()
        {
            return new XiaoMiMotherBoard();
        }
    }

   /// <summary>
    /// 蘋果手機工廠
    /// </summary>
    public class AppleFactory : AbstractFactory
    {
        /// <summary>
        /// 生產(chǎn)蘋果手機屏幕
        /// </summary>
        /// <returns></returns>
        public override Screen CreateScreen()
        {
            return new AppleScreen();
        }

        /// <summary>
        /// 生產(chǎn)蘋果手機主板
        /// </summary>
        /// <returns></returns>
        public override MotherBoard CreateMotherBoard()
        {
            return new AppleMotherBoard();
        }
    }

4

內(nèi)容創(chuàng)建完成,接下去我們就來進行結(jié)果的輸出

       //小米工廠生產(chǎn)小米手機的屏幕和主板
            AbstractFactory xiaomiFactory = new XiaoMiFactory();
            Screen xiaomiScreen = xiaomiFactory.CreateScreen();
            xiaomiScreen.print();
            MotherBoard xiaomiMotherBoard = xiaomiFactory.CreateMotherBoard();
            xiaomiMotherBoard.print();

            //蘋果工廠生產(chǎn)蘋果手機屏幕和主板
            AbstractFactory appleFactory = new AppleFactory();
            Screen appleScreen = appleFactory.CreateScreen();
            appleScreen.print();
            MotherBoard appleMotherBoard = appleFactory.CreateMotherBoard();
            appleMotherBoard.print(); 

理解:
不同的商家擁有自己的工廠創(chuàng)建自己的產(chǎn)品
1、首先實例化商家工廠
2、創(chuàng)建不同的商品
3、調(diào)用商品功能

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 工廠模式是我們最常用的實例化對象模式了,是用工廠方法代替new操作的一種模式。通常我們所說的工廠模式是指工廠方法模...
    zfylin閱讀 1,409評論 0 7
  • 簡單工廠模式 工廠模式我的理解是:他就是為了創(chuàng)建對象的 創(chuàng)建對象的時候,我們一般是alloc一個對象,如果需要創(chuàng)建...
    GitHubPorter閱讀 8,230評論 6 16
  • //聯(lián)系人:石虎QQ: 1224614774昵稱:嗡嘛呢叭咪哄 一、簡單工廠模式 1、簡述首先需要說明一下,簡單工...
    石虎132閱讀 1,710評論 1 16
  • 能量代謝與能量平衡1 先來幾個以前模糊的知識點: 正反饋:讓反應(yīng)加快。反之,負(fù)反饋,則是使反應(yīng)變慢或停止。 低血糖...
    半夏星火閱讀 366評論 15 4
  • 體驗 今天開始每天花一個小時復(fù)訓(xùn)(抄寫,背誦)老師每個課程的筆記。 今天抄《企業(yè)運營智慧》運行人:運行自己(八大精...
    若蘭ZHOU閱讀 189評論 0 1

友情鏈接更多精彩內(nèi)容