3 工厂方法模式

Posted 那就让我这样吧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

缺点:

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

以上是关于3 工厂方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式工厂方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

设计模式:工厂方法模式

设计模式-3-工厂方法

Java设计模式图文代码案例详解Java五大创建者模式 建造者原型(抽象)工厂单例模式

PHP面向对象之选择工厂和更新工厂

设计模式-----抽象工厂模式