嚴格意義上來說,簡單工廠模式並不屬於GoF的23種設計模式,但是它是學習其他工廠模式的基礎和前提條件。理解了簡單工廠模式,學習工廠方法模式和抽象工廠模式會比較容易一些。 簡單工廠模式的定義 定義一個工廠類,他可以根據不同的參數返回不同類的實例。通常情況下,被創建的類的實例通常都具有共同的父類。 簡單 ...
嚴格意義上來說,簡單工廠模式並不屬於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
歡迎關註官方微信號: