设计模式 工厂方法模式

本文将介绍设计模式中的工厂方法模式。

一、什么是工厂方法模式?

提供一个声明了产品创建方法的接口,让具体的工厂类实现该方法,从而创建出对应的产品。

二、实现

1. 结构

2. 角色

  • Factory 抽象工厂:
    • 所有工厂的抽象类
    • 定义了抽象工厂方法,该方法应该被所有的具体工厂实现
  • ConcreteFactory 具体工厂:
    • 抽象工厂的子类
    • 负责创建对应的产品
  • Product 抽象产品:
    • 所有产品的父类
    • 封装了所有产品的公用方法
  • ConcreteProduct 具体产品:
    • 创建目标

3. 简单示例

Factory:

1
2
3
interface Factory {
public Product getProduct();
}

ConcreteFactory:

1
2
3
4
5
6
public class ConcreteFactory implements Factory {
public Product getProduct() {
Product = ...;
return product;
}
}

Product:

1
2
3
public abstract class Product {
...
}

ConcreteProduct:

1
2
3
Public class ConcreteProduct extends Product {
···
}

使用:

1
2
3
4
5
6
Factory factory;

// 通过依赖注入、反射、手动等方式实例化工厂类
···

Product product = factory.getProduct();

三、优缺点

1. 优点

  • 增加新的产品时,只需要增加对应的具体工厂类,而无需修改抽象工厂类中的原有代码

2. 缺点

  • 增加新的产品时,要增加产品类、具体工厂类,系统中类的个数将成倍提升

参考

  • 《Java 设计模式》