一 概要
1.1 创建型模式
- 描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。
1.2 定义
- 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。
二 UML类图
三 例子
public interface IFactory
{
IProduct GetProduct();
}
public class FactoryA : IFactory
{
public IProduct GetProduct()
{
return new ProductA();
}
}
public class FactoryB : IFactory
{
public IProduct GetProduct()
{
return new ProductB();
}
}
public interface IProduct
{
void Operation();
}
public class ProductA : IProduct
{
public void Operation()
{
//todo;
}
}
public class ProductB : IProduct
{
public void Operation()
{
//todo;
}
}
public class Test
{
public Test()
{
IFactory factory = new FactoryA();
IProduct product = factory.GetProduct();
product.Operation();
}
}
四 与简单工厂的区别
工厂方法是对简单工厂的进一步抽象, 简单工厂是一个工厂类管理了所有产品对象的创建, 而工厂方法则是把工厂抽象化, 在对应的子类工厂内创建对应的产品对象。
五 优缺点
5.1优点
- 降低了产品类与客户端代码的耦合,克服了简单工厂违背开放封闭的原则,每次新增产品, 只需要增加新的对应的产品工厂管理, 无需修改原有的工厂类。
5.2 缺点
- 每新增一种产品, 都要新增一个对应的产品工厂类。
六 使用场景
- 客户只知道创建产品的工厂名,而不知道具体的产品名。
- 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
- 客户不关心创建产品的细节,只关心产品的品牌。