组成
- 抽象层
- 抽象工厂,负责创建抽象族类产品
- 抽象产品,负责提供抽象族类产品定义
- 实现层
- 具体对象,负责实现族类具体产品
- 具体产品,负责实现族类具体产品
- 应用层
- 使用配置或IOC容器配置具体工厂
- 针对抽象接口编码创建具体产品
UML类图
![]()
实践
- 一般抽象层可以通过接口或抽象类进行定义,具体选择接口或抽象类,可以根据实际情况考量
- 抽象层一般定义在单独的基础程序集中,定义核心程序集FactoryCore.dll
- 实现层一般定义在扩展的程序集中,依赖抽象层,定义扩展程序集FactoryCore.Extension.dll
- 应用层针对抽象接口编程,具体如何选择实现层,可以通过配置或者DI容器进行管理
类图
代码
抽象产品
namespace AbstractFactory.AbstractProduct
{
/// <summary>
/// 族类A产品抽象
/// </summary>
public abstract class AbstractProductA
{
public abstract string Name { get; }
public abstract void Action();
}
}
抽象工厂
namespace AbstractFactory.AbstractFactory
{
/// <summary>
/// 抽象工厂类
/// 提供抽象接口,用于创建抽象族类产品
/// </summary>
public abstract class ProductFactory
{
public abstract AbstractProductA CreateProductA();
public abstract AbstractProductB CreateProductB();
}
}
具体产品
namespace AbstractFactory.ConcreteObject
{
class ProductA1 : AbstractProductA
{
public override string Name
{
get { return "ProductA1"; }
}
public override void Action()
{
Console.WriteLine("Action as Product A1");
}
}
}
具体工厂
namespace AbstractFactory.ConcreteFactory
{
class Factory1 : ProductFactory
{
public override AbstractProductA CreateProductA()
{
return new ProductA1();
}
public override AbstractProductB CreateProductB()
{
return new ProductB1();
}
}
}
应用层
namespace AbstractFactory
{
class Consumer
{
public Consumer(ProductFactory factory)
{
ProductFactory = factory;
ProductA = ProductFactory.CreateProductA();
ProductB = ProductFactory.CreateProductB();
}
public ProductFactory ProductFactory { get; set; }
public AbstractProductA ProductA { get; set; }
public AbstractProductB ProductB { get; set; }
public void DoSomething()
{
ProductA.Action();
ProductB.Action();
}
}
}
后续
关于简单工厂和工厂方法,由于思想差异不是很大,在这里就不一一介绍了,具体可以参考:
更多的,请参考互联网:Differences between Abstract Factory Pattern and Factory Method
