隨手Design Pattern (3) - 簡單工廠模式(Simple Factory Pattern)
文章推薦指數: 80 %
參考範例
簡單工廠是相當易用的一種設計模式,當程式複雜度高的時候時候,可以利用此模式切割複雜度高的判斷式,抽離業務邏輯與建構式,讓業務邏輯單純,隔離複雜的建構式,有效提升程式碼的可讀性,藉由C#語法特性更可以降低程式複雜度。
定義簡單工廠模式(SimpleFactoryPattern):又稱為靜態工廠方法(StaticFactoryMethod)模式,它屬於類創建型模式。
角色簡單工廠模式包含如下角色:
Product:抽象產品角色抽象產品角色是所有產品的父類別,在C#來說可以是抽象類別(AbstractClass)或者是介面(Interface),公開屬性與方法簽章,外部程式依賴此角色。
ConcreteProduct:具體產品角色具體產生的產品實體,藉由工廠角色依據條件而建立。
Factory:工廠角色工廠角色負責建立對應的物件。
UML類別圖
實作說明抽象產品角色-本次範例用IBrid介面來示範,公開Name屬性與Fly方法。
123456publicinterfaceIBird{stringName{get;set;}voidFly();}
具體產品角色-Eagle&Swan兩種鳥類的具體實作
123456789publicclassEagle:IBird{publicstringName{get;set;}="老鷹";publicvoidFly(){//實作可以飛高空}}
123456789publicclassSwan:IBird{publicstringName{get;set;}="天鵝";publicvoidFly(){//實作只能飛低空}}
工廠角色:使用switch實作
1234567891011121314151617publicstaticclassBirdFactory{publicstaticIBirdGetBird(stringbirdName){switch(birdName){case"Swan":returnnewSwan();case"Eagle":returnnewEagle();default:thrownewException("missingmatchingbirdname");}}}
12345678privatestaticvoidMain(string[]args){vareagle=BirdFactory.GetBird("Eagle");varswan=BirdFactory.GetBird("Swan");Console.WriteLine($"BirdName:{eagle.Name}");Console.WriteLine($"BirdName:{swan.Name}");}
藉由BirdFactory將switch判斷式抽離,Main程式複雜度下降,這也就是簡單工廠帶來的效益,專注商業邏輯,抽離複雜的判斷式。
但是其實這仍不夠好,隨著實作IBird的鳥類越來越來多,BirdFactory裡的switch會越來越複雜,也就越來越難維護。
這裡使用的是CodeMaid的Spade功能,有時間在另外做說明!
這裡在提供一個使用Linq語法取代switch語法的範例,可以有效地降低複雜度。
123456789101112131415161718192021publicstaticclassBirdFactoryWithLinq{privatestaticreadonlyDictionary
結論
優點
工廠封裝了各類別的建構式邏輯,客戶端不需要知道如何建構類別實體,可以直接操作公開的方法,做到實質的隔離,達成了職責分離。
透過參數設定檔,可以實現不修改成客戶端程式碼的,而增加可以使用類別。
缺點
使用簡單工廠模式將會增加系統中類別的數量,純理論來說增加了系統的複雜度和理解難度。
有可能造成工廠邏輯過於複雜,不利於系統的擴展和維護。
因使用靜態方法,所以工廠類別無法繼承。
總結優缺點,在情境式適合下,簡單工廠很容易的做到職責分離,搭配C#Linq更可以有效降低工廠的程式複雜度,是很值得使用的!
參考範例Github範例下載連結
相關文章
隨手DesignPattern(2)-軟體分層設計模式(SoftwareLayeredArchitecturePattern)
隨手DesignPattern(5)-雙重檢查鎖定模式(Double-CheckedLockingPattern)
隨手DesignPattern(6)-單例模式(SingletonPattern)
隨手DesignPattern(4)-Repository模式(RepositoryPattern)
在ASP.NETCore中使用AutoMapper
作者:RayChiu
文章連結:
https://raychiutw.github.io/2019/隨手-Design-Pattern-3-簡單工廠模式-Simple-Factory-Pattern/
版權聲明:本網誌所有文章除特別聲明外,均採用BY-NC-SA許可協議。
轉載請註明出處!
文章目錄
本站概要
RayChiu
28
文章
5
分類
31
標籤
RSS
GitHub
1.定義2.角色3.UML類別圖4.實作說明5.結論6.參考範例
0%
延伸文章資訊
- 1設計模式學習筆記- Study Design Pattern In Java
... 模式的聖經Design Patterns : Elements of Re-usable Object-Oriented Software,發現這本書很難, 只好先放棄,真正開始是從大話...
- 2Chapter3: 策略模式(Strategy Pattern)
1.Strategy Pattern. 2.Strategy Pattern Example ... 若使用策略模式來套用上述範例, 則可以解決繼承所帶來的問題, 也可以重複使用已經寫好的程式碼:.
- 3媽! 我學會Design Pattern了- 23種Design Pattern範例#7 - GitHub
所以我整理了一些較簡單的Javascript Sample Code跟說明在這邊,希望可以幫助到想學Design Pattern的人。 總體來說設計模式分為3大類:. 創建型模式,共5 ...
- 4隨手Design Pattern (3) - 簡單工廠模式(Simple Factory Pattern)
參考範例
- 5以Java 程式範例來探討Design Pattern:Factory Method
以 Java 程式範例來探討 Design Pattern: Factory Method. 作者:李元豪. 使用的時機與目的:. 當我們撰寫應用程式時,如果無法明確地知道要產生的類別,需使用那...