• 设计模式——工厂方法模式(Factory Method)


    在简单工厂模式中通过工厂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语句)。

  • 相关阅读:
    Central Contract无法传到ECC的排查工具
    直接采购在Core SRM与SRM PPS间的区别
    整理一下思路
    PR无法修改的几个原因
    MARCTRAME与MARCHTRAME
    Revision Level在PS中的决定
    Storage Location在物料分配时的选择逻辑
    如何正确删除WBS下的Planned Independent Requirement
    Open XML SDK 2.0
    Silverlight使用问题汇总一
  • 原文地址:https://www.cnblogs.com/wwj1992/p/8476121.html
Copyright © 2020-2023  润新知