一、模式定义
工厂方法模式(Factory Method Pattern):定义一个抽象工厂父类用于泛化各种工厂子类,通过各个工厂子类来实例化某一种具体产品类的模式。也称作虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。
简单来说,工厂方法模式就是简单工厂模式的推广(之前博客提到简单工厂模式),区别在于简单工厂模式将所有产品由一个工厂负责,而工厂模式实现了工厂的泛化,让一个工厂生产一种产品,使得当有新的产品加入时无需修改原有工厂代码,只需泛化新的工厂子类即可,符合了“开闭原则”。
二、模式类图
抽象产品(Product)类
具体产品(ConcreteProductA & B)
抽象工厂(Factory)类
具体工厂(ConcreteFactoryA & B)
三、模式简要代码
abstract class Factory{
//这里是抽象工厂类
abstract public Product createProduct();
}
class ConcreteFactoryA extends Factory{
//这里是具体工厂类
public Product createProduct() { return new ConcreteProductA();}
}
class ConcreteFactoryB extends Factory{
//注意返回类型
public Product createProduct() { return new ConcreteProductB();}
}
abstract class Product{
//这里是抽象产品类
abstract public void Print();
}
class ConcreteProductA extends Product{
//这里是具体产品类
public void Print() { System.out.println("This is A");}
}
class ConcreteProductB extends Product{
public void Print() {System.out.println("This is B");}
}
//主函数
public class Main {
public static void main(String[] args) {
Factory A = new ConcreteFactoryA();
Factory B = new ConcreteFactoryB();
Product pA = A.createProduct();
Product pB = B.createProduct();
pA.Print();
pB.Print();
}
}
四、模式优缺点
1.优点:增加新的产品类时无需修改现有系统。
2.缺点:增加新的产品类时需要增加新的工厂子类,增加系统的复杂性。