抽象工厂

这个示例展示了如何运用抽象工厂模式来创建不同饮品店的饮品,如茶和咖啡。通过定义接口`Afactory`,实现了两个具体的工厂`Factory1`和`Factory2`,分别代表不同的饮品分店,每个工厂可以生产茶和咖啡。在`Main`方法中,通过实例化这两个工厂并调用相应的方法,创建了饮品并打印出选择的饮品和杯型。
摘要由CSDN通过智能技术生成

抽象工厂:围绕一个超级工厂创建其它工厂,属于创建型模式,它提供一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显示指向他们的类
场景描述:有一天,我去了某饮品分店1,有茶、咖啡、果汁等,选择了茶。又有一天,出去踏青,看到景点有某饮品分店2,有茶、咖啡、果汁。上次觉得味道不错,想换新口味,于是选择了咖啡,虽然是分店,但是口味包装还是有区别。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AbstractFactory
{
    //抽象工厂 抽象模式中的具体工厂不止创建一种产品,它创建一簇
    public abstract class Drink
    { //饮品类
        public string name{set;get;}//饮品名
        public string vol{set;get;}//大小杯
        public abstract void MakeDrink(string name, string vol);
    }
    public class Tea : Drink
    {
        //茶
        public Tea(string name, string vol)
        {
            this.name = name;
            this.vol = vol;
        }
        public override void MakeDrink(string name, string vol)
        {
            Console.WriteLine("您选择的饮品:{0}  您选择的杯:{1}",name,vol);
        }
    }
    public class Coffee : Drink
    {
        //咖啡
        public Coffee(string name, string vol)
        {
            this.name = name;
            this.vol = vol;
        }
        public override void MakeDrink(string name, string vol)
        {
            Console.WriteLine("您选择的饮品:{0}  您选择的杯:{1}", name, vol);
        }
    }
    interface Afactory
    {
        Drink CoffeeDrink(string name, string vol);
        Drink TeaDrink(string name, string vol);
    }
    public class Factory1 : Afactory
    {
        public Factory1()
        {
            Console.WriteLine("奶茶分店1正在为您服务");
        }
        public Drink CoffeeDrink(string name,string vol)
        {
            return new Coffee(name,vol);
        }
        public Drink TeaDrink(string name, string vol)
        {
            return new Tea(name, vol);
        }
    }
    public class Factory2: Afactory
    {
        public Factory2()
        {
            Console.WriteLine("奶茶分店2正在为您服务");
        }
        public Drink CoffeeDrink(string name, string vol)
        {
            return new Coffee(name, vol);
        }
        public Drink TeaDrink(string name, string vol)
        {
            return new Tea(name, vol);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Factory1 f1 = new Factory1();
            Drink d1 = f1.CoffeeDrink("咖啡", "小杯");
            d1.MakeDrink("咖啡", "小杯");

            Factory2 f2 = new Factory2();
            Drink d2 = f2.TeaDrink("茶", "大杯");
            d2.MakeDrink("茶", "大杯");
            Console.ReadKey();
        }
    }
}

欢迎交流指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值