設計模式之簡單工廠模式(C#語言描述)
嚴格意義上來說,簡單工廠模式並不屬於GoF的23種設計模式,但是它是學習其他工廠模式的基礎和前提條件。理解了簡單工廠模式,學習工廠方法模式和抽象工廠模式會比較容易一些。
簡單工廠模式的定義
定義一個工廠類,他可以根據不同的引數返回不同類的例項。通常情況下,被建立的類的例項通常都具有共同的父類。
簡單工廠模式又可以稱之為靜態工廠方法模式,因為建立物件例項的方法通常都是靜態方法。
在簡單工廠模式中,只需要記住一點。一個簡單的引數可以即可獲得所需的物件例項。
簡單工廠模式的UML圖如下:
簡單工廠模式包含三個角色:
1、工廠角色(Factory)
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
歡迎關注官方微訊號: