• 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

    缺点:

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

  • 相关阅读:
    Python——str(字符串)内部功能介绍
    Python网络编程——设定并获取默认的套接字超时时间
    Python网络编程——主机字节序和网络字节序之间的相互转换
    Python网络编程——通过指定的端口和协议找到服务名
    python网络编程——将IPv4地址转换成不同的格式
    Python网络编程——获取远程设备的IP地址
    Python网络编程——设备名和IPv4地址
    Python+Flask+MysqL的web建设技术过程
    管理信息系统 第三部分 作业
    模型分离(选做)
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5641159.html
Copyright © 2020-2023  润新知