设计模式 抽象工厂模式

本文将介绍设计模式中的抽象工厂模式。

一、什么是抽象工厂模式?

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

二、产品等级结构和产品族

  • 产品等级结构:

    • 即产品的继承结构
    • 抽象产品为父类,具体产品为子类

    电视长虹电视、索尼电视、海尔电视。。。 便构成了一个产品等级结构

  • 产品族:

    • 由同一个工厂生产的,但位于不同产品等级结构的一组产品

    海尔电视、海尔冰箱、海尔洗衣机、。。。

三、实现

1. 结构

2. 角色

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

3. 简单示例

Factory:

1
2
3
4
interface Factory {
public ProductA getProductA();
public ProductB getProductB();
}

ConcreteFactory:

1
2
3
4
5
6
7
8
9
10
11
public class ConcreteFactory implements Factory {
public ProductA getProductA() {
ProductA product = ...;
return product;
}

public ProductB getProductB() {
ProductB product = ...;
return product;
}
}

四、优缺点

1. 优点

  • 增加新的产品族很方便

    增加产品及具体工厂即可

  • 适用于系统中需要使用一族不同产品的情况

2. 缺点

  • 增加新的产品等级结构很麻烦

    需要修改抽象工厂类和所有的具体工厂类

参考

  • 《Java 设计模式》