工厂方法的定义是:
定义一个接口用于创建一个对象,但是让子类决定实例化哪个类。工厂方法让类的实例化推迟给子类进行。
其UML类图的示例如下:
在这个模式中,参与者包括:
- Product,定义工厂方法创建对象的接口。
- ConcreteProduct:实现Product接口。
- Creator:声明工厂方法,返回Product类型的对象。还定义一个工厂方法的默认实现,返回一个默认的ConcreteProduct对象。还可能调用工厂方法创建一个Product对象。
- ConcreteCreator:重写工厂方法,返回一个ConcreteProduct的实例。
实现代码:
interface Product
{
}
class ConcreteProductA : Product
{
}
class ConcreteProductB : Product
{
}
abstract class Creator
{
public abstract Product FactoryMethod(string type);
}
class ConcreteCreator : Creator
{
public override Product FactoryMethod(string type)
{
switch (type)
{
case "A": return new ConcreteProductA();
case "B": return new ConcreteProductB();
default: throw new ArgumentException("Invalid type", "type");
}
}
}
使用场景:
- 子类确定创建什么对象。
- 父类允许把初始化推迟到子类,也就是说按需要创建对象。
- 创建对象的过程需要集中在程序中。
- 一个类(创建者)不知道创建什么类