概念
定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类,又被称作虚拟构造器。
例子
定义一个工厂接口,里面定义创建产品的方法。可重载多个创建方法以便于根据方法的参数来决定所创建的具体产品对象。方法的返回类型最好为产品的基类型,以方便调用。然后定义具体工厂来实现工厂接口,不同的工厂创建不同的产品。
代码示例:
//工厂接口
interface BaseFactory{
BaseProduct produce(ProductType type);
}
//黑色工厂,生产黑颜色的产品
public class BlackFactory implements BaseFactory{
public BaseProduct produce(ProductType type) {//ProductType为枚举类
return new BlackProduct(type);//BlackProduct继承BaseProduct
}
}
//白色工厂,生产白颜色的产品
public class WhiteFactory implements BaseFactory {
public BaseProduct produce(ProductType type) {
return new WhiteProduct(type);//WhiteProduct继承BaseProduct
}
}
BaseFactoy bFactory = new BlackFactory();
BaseFactoy wFactory = new BlackFactory();
BaseProduct bp;
//生产黑色的苹果
bp = bFactory.produce(ProductType.APPLE);
//生产黑色的梨
bp = bFactory.produce(ProductType.PEAR);
//生产白色的苹果
bp = wFactory.produce(ProductType.APPLE);
//生产白色的梨
bp = wFactory.produce(ProductType.PEAR);
适用性
- 类不能确定它必须创建的对象类是哪个
- 类希望它的子类来确定所创建的对象