意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类(接口类)的实例化延迟到其子类。
适用性:
当一个类不知道它所必须创建的对象的类的时候。(工厂不知道具体创建产品A还是产品B)
当一个类希望由它的子类来指定它所创建的对象的时候。(用工厂A和工厂B来创建产品)
当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
类图:
/**
工厂方法模式
/*
// FactoryMethod工厂方法类
public class FactoryMethod{
public static void main(String[] args){
// 创建一个工厂
Factory factoryA = new FactoryA();
// 创建一个产品
Product productA = factoryA.createProduct() // 编译看=左边(是否有对应的方法),运行看=右边(实际是否有对应的方法)
productA.info(); // 具体产品的方法
// 创建一个工厂
Factory factoryB = new FactoryB();
// 创建一个产品
Product productB = factoryB.createProduct()
productB.info(); // 具体产品的方法
}
}
// Product 产品接口
interface Product{
public void info();
}
// ProductA 实现 Product 产品接口
class ProductA implements Product{
// 实现抽象产品类中的抽象方法
@Override
public void info(){
System.out.println("产品A")
}
}
// ProductB 实现 Product 产品接口
class ProductB implements Product{
// 实现抽象产品类中的抽象方法
@Override
public void info(){
System.out.println("产品B")
}
}
// Factory 工厂接口
interface Factory{
public Product createProduct();
}
// FactoryA 实现 工厂接口
class FactoryA implements Factory{
@Override
public Product createProduct(){
return new ProductA();
}
}
// FactoryB 实现 工厂接口
class FactoryB implements Factory{
@Override
public Product createProduct(){
return new ProductB();
}
}