码迷,mamicode.com
首页 > Windows程序 > 详细

C#设计模式(3)——工厂方法模式(Factory Method)

时间:2018-02-26 23:25:19      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:简单   派生   修改   ons   绿色   car   工厂模式   设计模式   多态性   

在简单工厂模式中通过工厂Factory获取不同的对象,但是有一个明显的缺点——简单工厂模式系统难以扩展!

一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,

可以通过工厂方法模式可以解决简单工厂模式中存在的这个问题,看代码:

    /// <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("生产了黑色轿车");
        }
    }

汽车类下面有两种不同颜色的汽车(橘黄色和黑色),下面通过工厂抽象类得到不同的汽车。

    /// <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();
        }
    }

使用工厂方法实现的系统,如果系统需要添加新产品时,我们可以利用多态性来完成系统的扩展,对于抽象工厂类和具体工厂中的代码都不需要做任何改动。

例如,我们我们还想输出一辆绿色汽车,此时我们只需要定义一个绿色汽车具体工厂类绿色汽车类就可以。而不用像简单工厂模式中那样去修改工厂类中的实现(具体指添加case语句)。

C#设计模式(3)——工厂方法模式(Factory Method)

标签:简单   派生   修改   ons   绿色   car   工厂模式   设计模式   多态性   

原文地址:https://www.cnblogs.com/wwj1992/p/8476121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!