简要说明
抽象工厂模式拥有一组工厂类,这些工厂类实现同一个抽象工厂接口,这个接口定义了一系列创建方法,每一个方法创建一种产品,所有方法所创建的产品组成一个系列。不同的具体工厂类创建不同系列的系列产品,系列中每一种产品实现同一个接口。客户类依赖抽象工厂接口及各个产品接口,并通过实例化不同的具体工厂创建不同的产品系列。
抽象工厂适用于客户类拥有与产品系列无关的加工逻辑的场合,此时通过抽象工厂模式,将创建产品系列的逻辑与加工逻辑分离,那么同样的加工逻辑就可以作用于不同的产品系列,至于创建哪个系列的产品则由客户类拥有的具体的工厂决定。
结构类图
结构示例代码
/**************************************************
*
- Design Pattren Quick Start
- 01 Abstract Factory - 抽象工厂
**************************************************/
namespace DesignPatternQuickStart.AbstractFactory
{
///
/// 产品A的接口
///
interface IProductA { }
///
/// 品种为1的产品A
///
class ProductA1 : IProductA { }
///
/// 品种为2的产品A
///
class ProductA2 : IProductA { }
///
/// 产品B的接口
///
interface IProductB { }
///
/// 品种为1的产品B
///
class ProductB1 : IProductB { }
///
/// 品种为2的产品B
///
class ProductB2 : IProductB { }
///
/// 抽象工厂接口
///
interface IAbstractFactory
{
IProductA CreateProductA();
IProductB CreateProductB();
}
///
/// 生产1系列的具体工厂,用于生产品种为1为产品A和B
///
class Factory1 : IAbstractFactory
{
public IProductA CreateProductA()
{
return new ProductA1();
}
public IProductB CreateProductB()
{
return new ProductB1();
}
}
///
/// 生产2系列的具体工厂,用于生产品种为2为产品A和B
///
class Factory2 : IAbstractFactory
{
public IProductA CreateProductA()
{
return new ProductA2();
}
public IProductB CreateProductB()
{
return new ProductB2();
}
}
///
/// 客户类
///
class Client
{
public void OpreateMethod()
{
IAbstractFactory factory1 = new Factory1();
IProductA productA1 = factory1.CreateProductA();
IProductB productB1 = factory1.CreateProductB();
IAbstractFactory factory2 = new Factory2();
IProductA productA2 = factory2.CreateProductA();
IProductB productB2 = factory2.CreateProductB();
}
}
}