• 抽象工厂


    工厂方法模式之所以可以解决简单工厂的模式,是因为它的实现把具体产品的创建推迟到子类中,此时工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式就可以允许系统不修改工厂类逻辑的情况下来添加新产品,这样也就克服了简单工厂模式中缺点。下面看下工厂模式的具体实现代码(这里还是以简单工厂模式中点菜的例子来实现):

    namespace 设计模式之工厂方法模式
    {
    /// <summary>
    /// 菜抽象类
    /// </summary>
    public abstract class Food
    {
    // 输出点了什么菜
    public abstract void Print();
    }

    /// <summary>
    /// 西红柿炒鸡蛋这道菜
    /// </summary>
    public class TomatoScrambledEggs : Food
    {
    public override void Print()
    {
    Console.WriteLine("西红柿炒蛋好了!");
    }
    }

    /// <summary>
    /// 土豆肉丝这道菜
    /// </summary>
    public class ShreddedPorkWithPotatoes : Food
    {
    public override void Print()
    {
    Console.WriteLine("土豆肉丝好了");
    }
    }

    /// <summary>
    /// 抽象工厂类
    /// </summary>
    public abstract class Creator
    {
    // 工厂方法
    public abstract Food CreateFoddFactory();
    }

    /// <summary>
    /// 西红柿炒蛋工厂类
    /// </summary>
    public class TomatoScrambledEggsFactory:Creator
    {
    /// <summary>
    /// 负责创建西红柿炒蛋这道菜
    /// </summary>
    /// <returns></returns>
    public override Food CreateFoddFactory()
    {
    return new TomatoScrambledEggs();
    }
    }

    /// <summary>
    /// 土豆肉丝工厂类
    /// </summary>
    public class ShreddedPorkWithPotatoesFactory:Creator
    {
    /// <summary>
    /// 负责创建土豆肉丝这道菜
    /// </summary>
    /// <returns></returns>
    public override Food CreateFoddFactory()
    {
    return new ShreddedPorkWithPotatoes();
    }
    }

    /// <summary>
    /// 客户端调用
    /// </summary>
    class Client
    {
    static void Main(string[] args)
    {
    // 初始化做菜的两个工厂()
    Creator shreddedPorkWithPotatoesFactory = new ShreddedPorkWithPotatoesFactory();
    Creator tomatoScrambledEggsFactory = new TomatoScrambledEggsFactory();

    // 开始做西红柿炒蛋
    Food tomatoScrambleEggs = tomatoScrambledEggsFactory.CreateFoddFactory();
    tomatoScrambleEggs.Print();

    //开始做土豆肉丝
    Food shreddedPorkWithPotatoes = shreddedPorkWithPotatoesFactory.CreateFoddFactory();
    shreddedPorkWithPotatoes.Print();

    Console.Read();
    }
    }
    }

  • 相关阅读:
    day17 内置方法、数学模块、randrange随机模块、序列化模块pickle
    线性模型L2正则化——岭回归
    KMP算法
    KNN算法:KNN-classifier和KNN-regressor
    机器学习开篇——编译器的选择
    STL好坑
    树状数组学习笔记
    无题
    最小树形图:朱刘算法
    2019ICPC徐州站题解
  • 原文地址:https://www.cnblogs.com/DSC1991/p/8462036.html
Copyright © 2020-2023  润新知