抽象工厂模式(Abstract Factory Pattern)属于对象创建型模式。它提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
结构:
角色:
Abstract Factory:声明一个创建抽象产品对象的 操作接口
Concrete Factory:实现创建具体产品对象的操作
Abstract Product:为一类产品对象声明一个接口
Concrete Product:定义一个将被相应的具体工厂 创建的产品对象,实现 Abstract Product接口
代码示例:
using System;
namespace AbstractFactory
{
/// <summary>
/// 抽象工厂模式示例
/// </summary>
class AbstractFactory
{ //定义厨师的抽象工厂
public interface Chef
{ //这里定义厨师的公共操作
//返回抽象面条
Noodle MakeNoodle();
//返回抽象米饭
Rice MakeRice();
//返回抽象面包
Bread MakeBread();
}
//定义北方厨师,实现厨师接口
class NorthChef:Chef
{
public Noodle MakeNoodle()
{
Console.WriteLine("\n制作北方面条...");
Noodle noodle=new NorthNoodle();
return noodle;
}
public Rice MakeRice()
{
Console.WriteLine("\n制作北方米饭...");
Rice rice=new NorthRice();
return rice;
}
public Bread MakeBread()
{
Console.WriteLine("\n正在制作北方面包..");
Bread bread=new NorthBread();
return bread;
}
}
//定义南方厨师,实现厨师接口
class SouthChef:Chef
{
public Noodle MakeNoodle()
{
Console.WriteLine("\n正在制作南方面条。。。");
Noodle noodle=new SouthNoodle();
return noodle;
}
public Rice MakeRice()
{
Console.WriteLine("\n正在制作南方米饭。。。");
Rice rice=new SouthRice();
return rice;
}
public Bread MakeBread()
{
Console.WriteLine("\n正在制作南方面包。。。");
Bread bread=new SouthBread();
return bread;
}
}
//定义面条产品
public interface Noodle
{
//这里定义面条的公共操作
}
class NorthNoodle:Noodle
{
public NorthNoodle()
{
Console.WriteLine("\n一碗地道的北方面条产生了");
}
}
class SouthNoodle:Noodle
{
public SouthNoodle()
{
Console.WriteLine("\n一碗地道的南方面条产生了");
}
}
//定义米饭产品
public interface Rice
{
//这里定义米饭的公共操作
}
class NorthRice:Rice
{
public NorthRice()
{
Console.WriteLine("\n一碗地道的北方米饭产生了,真好吃");
}
}
class SouthRice:Rice
{
public SouthRice()
{
Console.WriteLine("\n一碗地道的南方米饭产生了,真难吃");
}
}
//定义面包
public interface Bread
{
/ /这里可以定义一些面包的公共操作
}
class NorthBread:Bread
{
public NorthBread()
{
Console.WriteLine("\n一个地道的北方面包产生了");
}
}
class SouthBread:Bread
{
public SouthBread()
{
Console.WriteLine("\n一个地道的南方面包产生了");
}
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//针对接口编程,创建对象尽量返回上层接口,避免使用具体类
//下面隐藏了具体的创建各种面条,米饭和面包的过程
Chef northChef=new NorthChef();
northChef.MakeNoodle();
northChef.MakeRice();
northChef.MakeBread();
Chef southChef=new SouthChef();
southChef.MakeBread();
southChef.MakeNoodle();
southChef.MakeRice();
Console.ReadLine();
}
}
}
抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式与工厂方法模式最大的区别在于,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则需要面对多个产品等级结构。