抽象工厂:围绕一个超级工厂创建其它工厂,属于创建型模式,它提供一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显示指向他们的类。
场景描述:有一天,我去了某饮品分店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();
}
}
}
欢迎交流指正!