1. 抽象工厂模式概述
抽象工厂模式(Abstract Factory Pattern)是创建型设计模式中最具代表性的模式之一,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这种模式在软件开发中极为常见,特别是在需要保证产品族一致性的场景下。
我在实际项目中最深刻的体会是:当你需要创建一整套具有关联性的对象时,抽象工厂模式能完美解决"如何确保这些对象能够协同工作"的问题。比如开发跨平台的UI组件库时,Windows风格的按钮必须和Windows风格的文本框搭配使用,这时候抽象工厂就是最优雅的解决方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模式结构与核心组件
2.1 UML类图解析
抽象工厂模式的标准结构包含以下核心角色:
- AbstractFactory(抽象工厂):声明创建抽象产品对象的接口
- ConcreteFactory(具体工厂):实现抽象工厂的接口,创建具体的产品对象
- AbstractProduct(抽象产品):为产品对象声明接口
- ConcreteProduct(具体产品):定义具体工厂创建的具体产品对象
mermaid复制classDiagram
class AbstractFactory {
+createProductA() AbstractProductA
+createProductB() AbstractProductB
}
class ConcreteFactory1 {
+createProductA() ProductA1
+createProductB() ProductB1
}
class ConcreteFactory2 {
+createProductA() ProductA2
+createProductB() ProductB2
}
class AbstractProductA {
<<interface>>
}
class ProductA1 {
+operationA()
}
class ProductA2 {
+operationA()
}
class AbstractProductB {
<<interface>>
}
class ProductB1 {
+operationB()
}
class ProductB2 {
+operationB()
}
AbstractFactory <|-- ConcreteFactory1
AbstractFactory <|-- ConcreteFactory2
AbstractProductA <|-- ProductA1
AbstractProductA <|-- ProductA2
AbstractProductB <|-- ProductB1
AbstractProductB <|-- ProductB2
ConcreteFactory1 --> ProductA1
ConcreteFactory1 --> ProductB1
ConcreteFactory2 --> ProductA2
ConcreteFactory2 --> ProductB2
2.2 代码实现示例
以下是一个完整的Java实现示例,展示如何创建跨平台的UI组件:
java复制// 抽象产品:按钮
interface Button {
void render();
}
// 具体产品:Windows按钮
class WindowsButton implements Button {
public void render() {
System.out.println("渲染Windows风格按钮");
}
}
// 具体产品:MacOS按钮
class MacOSButton implements Button {
public void render() {
System.out.println("渲染MacOS风格按钮");
}
}
// 抽象产品:复选框
interface Checkbox {
void paint();
}
// 具体产品:Windows复选框
class WindowsCheckbox implements Checkbox {
public void paint() {
System.out.println("绘制Windows风格复选框");
}
}
// 具体产品:MacOS复选框
class MacOSCheckbox implements Checkbox {
public void paint() {
System.out.println("绘制MacOS风格复选框");
}
}
// 抽象工厂
interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
// 具体工厂:Windows工厂
class WindowsFactory implements GUIFactory {
public Button createButton() {
return new WindowsButton();
}
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
// 具体工厂:MacOS工厂
class MacOSFactory implements GUIFactory {
public Button createButton() {
return new MacOSButton();
}
public Checkbox createCheckbox() {
return new MacOSCheckbox();
}
}
// 客户端代码
class Application {
private Button button;
private Checkbox checkbox;
public Application(GUIFactory factory) {
button = factory.createButton();
checkbox = factory.createCheckbox();
}
public void paint() {
button.render();
checkbox.paint();
}
}
// 使用示例
public class Demo {
public static void main(String[] args) {
// 创建Windows风格的UI
Application app = new Application(new WindowsFactory());
app.paint();
// 创建MacOS风格的UI
app = new Application(new MacOSFactory());
app.paint();
}
}
