C#設計模式(3)——工廠方法模式(Factory Method)

在簡單工廠模式中經過工廠Factory獲取不一樣的對象,可是有一個明顯的缺點——簡單工廠模式系統難以擴展!ide

一旦添加新產品就不得不修改簡單工廠方法,這樣就會形成簡單工廠的實現邏輯過於複雜,測試

能夠經過工廠方法模式能夠解決簡單工廠模式中存在的這個問題,看代碼:spa

/// <summary>
    /// 汽車抽象類 /// </summary>
    public abstract class AuthCar { /// <summary>
        /// 輸出製造了什麼汽車 /// </summary>
        public abstract void CreatorCar(); } /// <summary>
    /// 派生類-橘黃色轎車 /// </summary>
    public class _OriangeCar : AuthCar { public override void CreatorCar() { Console.WriteLine("生產了橘黃色轎車!"); } } /// <summary>
    /// 派生類-黑色轎車 /// </summary>
    public class _BlackCar : AuthCar { public override void CreatorCar() { Console.WriteLine("生產了黑色轎車"); } }

汽車類下面有兩種不一樣顏色的汽車(橘黃色和黑色),下面經過工廠抽象類獲得不一樣的汽車。code

/// <summary>
    /// 工廠類 /// </summary>
    public abstract class FactoryCreator { /// <summary>
        /// 獲取汽車對象 /// </summary>
        /// <returns></returns>
        public abstract AuthCar _AuthCar(); } /// <summary>
    /// 獲得黑色汽車實例 /// </summary>
    public class BlackCarFactoryMethod : FactoryCreator { public override AuthCar _AuthCar() { return new _BlackCar(); } } /// <summary>
    /// 獲得橘黃色汽車實例 /// </summary>
    public class OriangeFactoryMethod : FactoryCreator { public override AuthCar _AuthCar() { return new _OriangeCar(); } }

測試對象

class Program { static void Main(string[] args) { FactoryCreator factoryCreator = new BlackCarFactoryMethod(); FactoryCreator factoryCreator = new OriangeFactoryMethod(); factoryCreator._AuthCar().CreatorCar(); Console.ReadKey(); } }

使用工廠方法實現的系統,若是系統須要添加新產品時,咱們能夠利用多態性來完成系統的擴展,對於抽象工廠類和具體工廠中的代碼都不須要作任何改動。blog

例如,咱們咱們還想輸出一輛綠色汽車,此時咱們只須要定義一個綠色汽車具體工廠類綠色汽車類就能夠。而不用像簡單工廠模式中那樣去修改工廠類中的實現(具體指添加case語句)。string

相關文章
相關標籤/搜索