抽象工厂模式

模式描述

提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类。

优点

  1. 分离了具体的产品类;
  2. 有利于产品一致性;

缺点

  1. 难以扩展抽象工厂

应用场景

  1. 一个系统要独立产品的创建、组合和表示;
  2. 一个系统要由多个产品系列中的一个来配置;
  3. 提供一个产品库,只显示接口而非实现;
DATE CHANGELOG

UML 类图

classDiagram

class AbstractFactory {
	<<interface>>
	createProductA()
	createProductB()
}

class ConcreteFactoryA {
	createProductA()
	createProductB()
}

class ConcreteFactoryB {
	createProductA()
	createProductB()
}
AbstractFactory <|.. ConcreteFactoryA
AbstractFactory <|.. ConcreteFactoryB

class AbstractProduct {
	<<interface>>
	operator()
}

class ConcreteProductA {
	operator()
}

class ConcreteProductB {
	operator()
}
AbstractProduct <|.. ConcreteProductA
AbstractProduct <|.. ConcreteProductB

ConcreteFactoryA <-- ConcreteProductA
ConcreteFactoryB <-- ConcreteProductB

AbstractFactory <-- Client
AbstractProduct <-- Client

参与者

AbstractFactory

  • 声明创建抽象产品的方法

ConcreteFactoryX

  • AbstractFactory 的实现;

AbstractProduct

  • 为一类产品对象声明方法;

ConcreteProductX

  • AbstractProduct 的实现;

Client 类

客户端。

数据流

  1. 客户端通常创建一个 ConcreteFactory 对象,用来创建对应的 Product;
  2. AbstractFactory 将对象创建延迟到 ConcreteFactory 中;

相关模式

  • 工厂方法模式:抽象工厂常用工厂方法实现;
  • 原型模式:抽象工厂也能用原型模式实现;
  • 单例模式:一个具体的工厂是单例的;

补充

示例代码

golang

java