zoukankan      html  css  js  c++  java
  • 3 工厂方法模式

    简单工厂存在问题:对象统一行为抽象成一个接口(或者抽象类)之后,再根据传入的类型进行创建实例,但这只适用固定行为的场合,当要实现接口的类型处于不定数,则不适合使用简单工厂模式,而应该使用工厂方法

    工厂方法适合场合:
    子类有统一的操作行为
    子类的数量不固定,随时可能有新的功能子类出现
    工厂方法优势:
    子类之间是并列的,耦合度比较大
    创建具体对象方法灵活,可以使用反射或者第三方IOC容器

      /// <summary>
        /// 菜抽象类
        /// </summary>
        public abstract class Food
        {
            //输出点了什么菜
            public abstract string Print();
        }
        public class TomatoScrambledEggs : Food
        {
            public override string  Print()
            {
                return "西红柿炒鸡蛋";
            }
        }
        public class ShreddedPorkWithPotatoes : Food
        {
            public override string Print()
            {
                return "土豆丝炒鸡蛋";
            }
        }
        /// <summary>
        /// 抽象工厂类
        /// </summary>
        public abstract class Creator
        {
            /// <summary>
            /// 工厂方法
            /// </summary>
            /// <returns></returns>
            public abstract Food CreateFoddFactory();
        }
        /// <summary>
        /// 西红柿炒鸡蛋工厂类
        /// </summary>
        public class TomatoScrambledEggsFactory : Creator
        {
            public override Food CreateFoddFactory()
            {
                return new TomatoScrambledEggs();
            }
        }
        /// <summary>
        /// 土豆丝炒鸡蛋工厂类
        /// </summary>
        public class ShreddedPorkWithPotatoesFactory:Creator
        {
            public override Food CreateFoddFactory()
            {
                return new ShreddedPorkWithPotatoes();
            }
        }
    View Code

    调用:

      public void Get()
            {
                // 初始化做菜的两个工厂()
                Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory();
                Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory();
    
                // 开始做西红柿炒蛋
                Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory();
                string dd =  tomatoScrambleEggs.Print();
    
                //开始做土豆肉丝
                Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory();
               string dd2 =  shreddedPorkWithPotatoes.Print();
            }
    View Code

    缺点:

    工厂方法是为了克服工厂模式的缺点而设计出来的,每个工厂方法每个具体工厂类只完成单个实例的创建,但是现实生活中,一个工厂只创建单个产品的例子太少啦,所以需要抽象工厂模式:

  • 相关阅读:
    关于Flutter引用image_picker插件报错
    关于Flutter页面布局
    关于Flutter和Android混合开发引入flutter_boost插件-有更新,见底部
    关于uni-app的scroll-into-view
    关于全站http切换到https
    关于canvas画原子运动模型
    [BS-00] const限定常量或者变量(初次赋值后),其值不允许被改变
    认识C和内存管理
    C语言的内存管理
    堆heap和栈Stack(百科)
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5641159.html
Copyright © 2011-2022 走看看