Java设计模式——抽象工厂模式
⚪抽象工厂模式(Abstract Factory)是一种创建型设计模式,这个模式涉及到一个抽象工厂类,它有多个子类工厂,每个子类工厂负责创建一组相关的产品。
⚪意图:它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定其具体类。
⚪以下是工厂方法模式的关键要点:
▷ 角色和责任:
-
抽象工厂(Abstract Factory):定义了创建一组相关产品的接口。它包含多个创建产品的抽象方法,每个方法对应一个具体产品工厂。
-
具体工厂(Concrete Factory):实现抽象工厂接口,负责创建一组相关产品。每个具体工厂对应一个产品族。
-
抽象产品(Abstract Product):定义了产品对象的接口,包括产品的属性和方法。
-
具体产品(Concrete Product):实现了抽象产品接口,是具体的产品对象。
▷ 工作流程:
-
定义抽象工厂接口,其中包括一组抽象方法,每个方法用于创建一个产品。
-
创建具体工厂类,实现抽象工厂接口,并在每个方法中返回具体产品的实例。
-
定义抽象产品接口,包括产品的属性和方法。
-
创建具体产品类,实现抽象产品接口,提供具体产品的实现。
- 在客户端代码中,选择适当的具体工厂类,然后使用该工厂创建产品对象。
▷ 示例
// 抽象工厂接口 interface UIFactory { Button createButton(); TextField createTextField(); } // 具体工厂类 - Windows UI class WindowsUIFactory implements UIFactory { public Button createButton() { return new WindowsButton(); } public TextField createTextField() { return new WindowsTextField(); } } // 具体工厂类 - macOS UI class MacOSUIFactory implements UIFactory { public Button createButton() { return new MacOSButton(); } public TextField createTextField() { return new MacOSTextField(); } } // 抽象产品接口 interface Button { void render(); void onClick(); } interface TextField { void render(); String getText(); } // 具体产品类 - Windows UI class WindowsButton implements Button { // 实现 Windows 风格按钮的方法 } class WindowsTextField implements TextField { // 实现 Windows 风格文本框的方法 } // 具体产品类 - macOS UI class MacOSButton implements Button { // 实现 macOS 风格按钮的方法 } class MacOSTextField implements TextField { // 实现 macOS 风格文本框的方法 }
⚪适用性
- 一个系统要独立于它的产品的创建、组成和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当要强调一系列相关的产品对象的设计以便进行联合使用时。
- 当提供一个产品库类,只想显示它们的接口而不是实现时。
⚪应用场景
-
系统需要一组相关的产品对象,并且这些产品对象之间存在一定的约束或依赖关系,例如,同一种类型的按钮和文本框在不同操作系统下有不同的外观,但它们必须一起使用。
-
客户端代码需要与多个产品族中的一个交互,但是不希望依赖于具体产品的类。
- 它只关心与产品接口交互。系统的产品族经常变化,但是客户端代码不应随之变化。
⚪实际已有场景
-
Swing GUI 框架:Swing 是 Java 的图形用户界面工具包,它使用抽象工厂模式来创建不同外观(Look and Feel)的用户界面元素,如按钮、文本框等。每个外观对应一个具体工厂类,负责创建该外观下的所有 UI 组件。
- 数据库访问:在数据库访问中,抽象工厂模式可以用来创建数据库连接对象、命令对象等,以便在不同数据库(如MySQL、Oracle)之间切换时能够轻松切换数据库操作。
-
Bean 工厂:Spring 的 Bean 工厂(例如,org.springframework.beans.factory.BeanFactory)可以被视为工厂模式的一种实现,它负责创建和管理各种类型的 Bean 对象。
- 应用上下文:Spring 应用上下文(例如,org.springframework.context.ApplicationContext)扩展了 Bean 工厂,提供了更多的功能,包括依赖注入、事件传播等。这也可以看作是工厂模式的一种变体,用于创建和管理应用程序中的对象。

浙公网安备 33010602011771号