今天是工厂模式三兄弟的最后一个模式叫抽象工厂模式,抽象工厂模式与其他两兄弟在产品类上也是一样,无非就是工厂类的区别,简单工厂模式和工厂模式都是一个工厂只生产一种产品,但是在抽象工厂中一个工厂可以生产多种商品。举一个不太恰当的例子。有巧克力和面包两种食品,分别有富民食品厂和兴旺食品厂两个厂家生产。代码如下:
/// <summary>
/// 食品类
/// </summary>
public abstract class Food
{
/// <summary>
/// 用于显示食品类型
/// </summary>
public abstract void Show();
}
/// <summary>
/// 巧克力类
/// </summary>
public class QiaoKeLi : Food
{
public override void Show()
{
Console.Write("巧克力");
}
}
/// <summary>
/// 面包类
/// </summary>
public class Bread : Food
{
public override void Show()
{
Console.Write("面包");
}
}
public abstract class AbstractFactory //抽象工厂基类
{
public abstract Food CreateQiaoKeLi();
public abstract Food CreateBread();
}
public class FuMingFacctory : AbstractFactory//富民食品加工厂
{
public override Food CreateQiaoKeLi()
{
Console.Write("兴旺工厂出品巧克力");
return new QiaoKeLi();
}
public override Food CreateBread()
{
Console.Write("富民工厂出品面包");
return new Bread();
}
}
public class XingWangFacctory : AbstractFactory//兴旺食品加工厂
{
public override Food CreateQiaoKeLi()
{
Console.Write("兴旺工厂出品巧克力");
return new QiaoKeLi();
}
public override Food CreateBread()
{
Console.Write("兴旺工厂出品的面包");
return new Bread();
}
}
//客户端调用
AbstractFactory factory = new FuMingFacctory();
factory.CreateBread();
factory.CreateQiaoKeLi();
AbstractFactory mfactory = new XingWangFacctory();
mfactory.CreateBread();
mfactory.CreateQiaoKeLi();