設計模式-Factory 方法模式

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   資料   

前言

點擊查看:設計模式系列 

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

如果你對.net反射機制不瞭解,建議:.net反射詳解 

Factory 方法模式

描述一下Factory 方法的概要:簡單原廠模式是要在工廠類中通過資料來做個決策,在工廠類中的多個類中執行個體化出來其中一個要用到的類,做運算。而Factory 方法模式則是他的一個聰明的擴充,不在工廠類中做決策,而是把這個決策延遲到每個用到他的地方。

等待使用的類庫代碼:

 /// <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("努力,麵包會有的,雞蛋也會有的。");        }    }

Factory 方法執行個體化類:

     /// <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("設計模式.Factory 方法模式." + strfactoryName);            Live live = factory.Create();            live.Action();            Console.ReadLine();        }

使用此模式:降低調用端的耦合度,並且對於工廠來說,是可以擴充的,以後如果想過另外的一種生活,只需要再增加一個工廠類的實現就可以。無論是靈活性還是穩定性都得到了極大的提高。

什麼時候使用Factory 方法(此段摘自:《c#設計模式》,理解下)

下列情況考慮使用Factory 方法

1.類不能預測它必須建立哪一種類型的對象。

2.類使用它的子類指定他要建立的對象。

3.希望只有局部知曉那個類被建立。

關於原廠模式會有幾種變化,需要瞭解一下。

1.基類是抽象的,但模式必須返回一個可用的對象。

2.基類包含預設的方法,只有在預設方法不能勝任的情況下才調用這些方法。

3.傳遞給工廠的參數告知其返回幾種類型的類中的哪一個,在這種情況下,類可能會共用相同的方法名稱,但要實現的事情可能是很不相同的。

設計模式,討論,運用,歡迎加入部落格園左上方群

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.