简单工厂(Simple Factory)

本文介绍了一个简单的工厂模式应用案例,通过创建一个抽象的披萨类和具体的披萨子类(如起司披萨和意大利辣味香肠披萨),利用简单工厂来生产不同类型的披萨。同时展示了如何通过产品商店订购并制作这些披萨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂:它不是一个设计模式,却是非常常用的编程习惯。

产品基类

    //工厂所生产的产品"披萨"
    public abstract class Pizza
    {
	    //缺省产品名
        protected string name = "未知披萨";
        //产品生产工序
        public virtual void prepare()
        {
            Console.WriteLine("准备“{0}”的馅料", name);
        }

        public virtual void bake()
        {
            Console.WriteLine("350度分钟烤25分钟 ");
        }

        public virtual void cut()
        {
            Console.WriteLine("将比萨饼切成斜片");
        }

        public virtual void box()
        {
            Console.WriteLine("将披萨装入地方特色的盒子中");
        }
        //获取产品名称
        public string getName()
        {
            return name;
        }
    }

具体产品

    //起司披萨
    public class CheesePizza : Pizza
    {
        public CheesePizza()
        {
            base.name = "起司披萨";
        }
    }


    //意大利辣味香肠披萨
    public class PepperoniPizza : Pizza
    {
        public PepperoniPizza()
        {
            base.name = "意大利辣味香肠披萨";
        }
    }

产品简单工厂

    public class SimpleFactory
    {       
        public Pizza createPizza(string pizzaName)
        {
            Pizza pizza = null;
            if (pizzaName.Equals("起司披萨"))
            {
                pizza = new CheesePizza();
            }
            else if (pizzaName.Equals("意大利辣味香肠披萨"))
            {
                pizza = new PepperoniPizza();
            }
            return pizza;
        }
    }


产品商店

    public class PizzaStore
    {
        SimpleFactory factory;
        public PizzaStore(SimpleFactory factory)
        {
            this.factory = factory;
        }

        public Pizza orderPizza(string pizzaName)
        {
            Pizza pizza = factory.createPizza(pizzaName);
            if (pizza == null)
            {
                return pizza;
            }
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
            return pizza;
        }
    }

测试实例

        static void Main(string[] args)
        {
            PizzaStore pizzaStore = new PizzaStore(new SimpleFactory());
            Pizza pizza;
            while (true)
            {
                Console.WriteLine("请输入披萨名称或直接输入回车退出");
                string pizzaName = Console.ReadLine();
                if (string.IsNullOrEmpty(pizzaName))
                {
                    break;
                }
                pizza = pizzaStore.orderPizza(pizzaName);
                if (pizza == null)
                    Console.WriteLine("未找到指定披萨");
                else
                    Console.WriteLine("获得披萨:<{0}>", pizza.getName());
            }
        }

测试结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值