1. 程式人生 > >設計模式之簡單工廠模式(C#語言描述)

設計模式之簡單工廠模式(C#語言描述)

嚴格意義上來說,簡單工廠模式並不屬於GoF的23種設計模式,但是它是學習其他工廠模式的基礎和前提條件。理解了簡單工廠模式,學習工廠方法模式和抽象工廠模式會比較容易一些。

簡單工廠模式的定義

定義一個工廠類,他可以根據不同的引數返回不同類的例項。通常情況下,被建立的類的例項通常都具有共同的父類。

簡單工廠模式又可以稱之為靜態工廠方法模式,因為建立物件例項的方法通常都是靜態方法。

在簡單工廠模式中,只需要記住一點。一個簡單的引數可以即可獲得所需的物件例項。

簡單工廠模式的UML圖如下:

  簡單工廠模式包含三個角色:

   1、工廠角色(Factory)

該類是簡單工廠的核心,我們所需要的物件例項就是這個類幫我們建立的,它裡面有一個靜態方法GetProduct(string productType),我們通過傳入產品型別(productType)來得到我們想要的產品。

   2、抽象產品角色(AbstractProduct):該類是所有產品的父類。它可以是介面或者抽象類。只有這樣我們才能給工廠的GetProduct(string productType)方法定義返回值。

   3、實體產品(ConcreteProductA,ConcreteProductB,ConcreteProductC):這些類是簡單工廠最終要建立的目標,也是客戶端最終想要的物件例項。

現在來假設一種場景,我們開發過程中,肯定會用到按鈕,圓形按鈕、正方形按鈕、矩形按鈕等等,在程式的很多地方我們都可能會複用這些按鈕。我們可以通過一個簡單工廠來幫助我們建立這些按鈕。

首先我們要宣告工廠要生產的產品(各種按鈕)類

    public class Button
    {
        public virtual void OnClick()
        {

        }
    }
    public class RoungButton:Button
    {
        public override void OnClick()
        {
            Console.WriteLine("點選了圓形按鈕!");
        }
    }
    public class SquareButton:Button
    {
        public override void OnClick()
        {
            Console.WriteLine("點選了正方形按鈕!");
        }
    }
    public class RectangleButton:Button
    {
        public override void OnClick()
        {
            Console.WriteLine("點選了矩形按鈕!");
        }
    }

其次是我們的(靜態工廠類)

public class ButtonFactory
    {
        public static Button CreateButton(string type)
        {
            Button btnObj = null;
            switch (type)
            {
                case "round":
                    btnObj = new RoungButton();
                    break;
                case "square":
                    btnObj = new SquareButton();
                    break;
                case "rect":
                    btnObj = new RectangleButton();
                    break;
            }
            return btnObj;
        }
    }

在此處還有一些要說明的要點。

簡單工廠類幫助我們建立的是一類產品,這一類產品有一個共同的父類,這個父類是作為工廠方法的返回值來使用的。如果沒有這個共同的父類,我們的程式就需要用object作為返回值,然後在程式中進行強制轉換,這個明顯是非常不友好的程式設計。而作為一名程式設計師,在程式中進行大量的裝箱和拆箱操作是比較耗費效能的,良好的程式設計習慣中,也應該儘量減少裝箱拆箱的操作。

然後我們就可以在控制檯除錯我們的程式了

        static void Main(string[] args)//檔名的修改
        {
            Button roundBtn = ButtonFactory.CreateButton("round");
            roundBtn.OnClick();
            Button squareBtn = ButtonFactory.CreateButton("square");
            squareBtn.OnClick();
        }

程式的執行結果如下圖:

最後給大家介紹一個和技術相關的付費問答平臺、閱讀平臺-技易  歡迎訪問:http://www.seekwd.com

歡迎關注官方微訊號: