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

相关文章
相关标签/搜索