前言
點擊查看:設計模式系列
如果你對工廠模式這個概念不是很理解,建議:設計模式-簡單工廠模式
如果你對.net反射機制不了解,建議:.net反射詳解
工廠方法模式
描述一下工廠方法的概要:簡單工廠模式是要在工廠類中通過數據來做個決策,在工廠類中的多個類中實例化出來其中一個要用到的類,做運算。而工廠方法模式則是他的一個聰明的擴展,不在工廠類中做決策,而是把這個決策推遲到每個用到他的地方。
等待使用的類庫代碼:
/// <summary> /// Live類 /// </summary> public abstract class Live { public abstract void Action(); } /// <summary> /// Music類 /// </summary> public class Music : Live { public override void Action() { Console.WriteLine("哼哼哈嘿,快使用刷結棍!"); } } /// <summary> /// Bread類 /// </summary> public class Bread : Live { public override void Action() { Console.WriteLine("努力,面包會有的,雞蛋也會有的。"); } }
工廠方法實例化類:
/// <summary> /// LiveFactory類 /// </summary> public abstract class LiveFactory { public abstract Live Create(); } /// <summary> /// MusicFactory類 /// </summary> public class MusicFactory : LiveFactory { public override Live Create() { return new Music(); } } /// <summary> /// BreadFactory類 /// </summary> public class BreadFactory : LiveFactory { public override Live Create() { return new Bread(); } }
如何使用工廠類選擇創建實例(反射優化):
public static void Main(string[] args) { LiveFactory liveFactory = new MusicFactory(); Live musicLive = liveFactory.Create(); musicLive.Action(); Console.ReadLine(); //使用反射優化,修改變量就可得到想要的結果,而不必修改代碼 string strfactoryName = "BreadFactory"; LiveFactory factory; factory = (LiveFactory)Assembly.Load("設計模式").CreateInstance("設計模式.工廠方法模式." + strfactoryName); Live live = factory.Create(); live.Action(); Console.ReadLine(); }
使用此模式:降低調用端的耦合度,並且對於工廠來說,是可以擴展的,以后如果想過另外的一種生活方式,只需要再增加一個工廠類的實現就可以。無論是靈活性還是穩定性都得到了極大的提高。
什么時候使用工廠方法(此段摘自:《c#設計模式》,理解下)
下列情況考慮使用工廠方法
1.類不能預測它必須創建哪一種類型的對象。
2.類使用它的子類指定他要創建的對象。
3.希望只有局部知曉那個類被創建。
關於工廠模式會有幾種變化,需要了解一下。
1.基類是抽象的,但模式必須返回一個可用的對象。
2.基類包含默認的方法,只有在默認方法不能勝任的情況下才調用這些方法。
3.傳遞給工廠的參數告知其返回幾種類型的類中的哪一個,在這種情況下,類可能會共用相同的方法名稱,但要實現的事情可能是很不相同的。
設計模式,討論,運用,歡迎加入博客園左上方群