設計模式-工廠方法模式


前言

點擊查看:設計模式系列 

如果你對工廠模式這個概念不是很理解,建議:設計模式-簡單工廠模式 

如果你對.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.傳遞給工廠的參數告知其返回幾種類型的類中的哪一個,在這種情況下,類可能會共用相同的方法名稱,但要實現的事情可能是很不相同的。

設計模式,討論,運用,歡迎加入博客園左上方群

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM