深入解析工厂模式:简单工厂、工厂方法与抽象工厂的三种实现方式及其应用场景

工厂模式属于创建模式。创建模式对类的实例化过程进行了抽象,要求“创建与使用分离”。

深入解析工厂模式:简单工厂、工厂方法与抽象工厂的三种实现方式及其应用场景

使用场景包括:

工厂模式有三种不同的实现,即简单工厂模式、工厂方法模式和抽象工厂模式。共同的特点是定义一个创建对象的工厂接口,将对象的实际创建工作交给具体的子工厂类。

这三种实现方法都是基于工厂方法模式的。简单的对象创建过程使用简单工厂模式,多类、复杂的创建过程使用抽象工厂模式。

为了解释这种模式,将正在创建的对象称为“产品”,将创建产品的对象称为“工厂”。

工厂方法模式

工厂方法模式,又称工厂模式、多态工厂模式、虚拟构造函数模式,其核心思想是由不同的子类负责生成具体的对象,使工厂生产类符合开闭原则,而具体的工厂类符合单一责任原则。

工厂方法模式由四个角色组成:抽象工厂、具体工厂、抽象产品和具体产品。

组成(角色)

关系

影响

抽象产品

特定产品的父类

描述特定产品的公共接口

混凝土产品

抽象产品的子类;工厂类创建的目标类

描述生产的具体产品

抽象工厂(创建者)

具体工厂的父类

描述特定工厂的公共接口

具体创造者

抽象工厂的子类;受外界号召生产特定产品

描述具体工厂;实现工厂方法来创建产品的实例

类图如下:

如果客户端想要获取一个产品实例,只需要交给工厂类即可。工厂类将完成整个创建过程。当然,还需要提前实例化具体的工厂类。

工厂方式模型会增加系统的复杂度,当有新产品出现时,类的数量会成对增加。只适合生产一种产品类型的场景。

Spring源码中有很多工厂方法模式的应用。例如,FactoryBean 及其实现者就是工厂。子类ListFactoryBean可以创建List对象,子类MapFactoryBean可以创建Map对象。

简单工厂模式

简单工厂模式也称为静态方法模式。工厂类提供静态方法。它是工厂方法模式的一个特例。当产品系统比较有限时,不需要提供复杂的工厂系统,简化为使用工厂类的静态方法来生产有限的产品实例。

简单工厂模式由三个角色组成:工厂、抽象产品和具体产品。与工厂方法模式相比,工厂类取代了工厂系统。

类图如下:

客户端使用时,只需要调用工厂的静态方法,告诉它需要什么产品,就可以获取对应的产品实例。

简单工厂模式只是将对象的创建和使用分开。因为他只有一个工厂,添加产品就会影响一切,不符合开闭原则。

JDK源码中,java.util.Calendar实例化了自己的getInstance方法,使用的是工厂模式的简单工厂模式。

抽象工厂模式

抽象工厂模式提供了一个接口,用于创建一组相关或相互依赖的对象,而无需指定它们的具体类。可以说是工厂方法模式的扩展,用于需要创建的产品有多个产品线(产品族)的场景。

抽象工厂模式与工厂方法模式的作用相同,只不过产品可以水平扩展为多个产品族(并且可以支持多个级别)。在工厂中创建产品实例的方法也有多种。每个具体工厂都需要执行这个级别。所有产品是如何创建的。

类图如下:

客户端只需要知道抽象工厂模式提供的接口,不需要知道创建细节。产品族的添加符合开闭原则。

然而,当需要向产品族中添加新的产品类别(级别)时,所有工厂类都需要修改。在这种场景下,抽象工厂模式的使用增加了复杂性。

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

23阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

27阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

23阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读