Skip to content

抽象工厂模式

字数: 0 字 时长: 0 分钟

简介

抽象工厂模式(Abstract Factory Pattern)是对工厂方法模式的一种扩展。

  • 工厂方法模式主要用于创建单一产品
  • 抽象工厂模式主要用于创建产品族

UML 图

abstractFactory.webp

从类图可以看出来,抽象工厂模式和工厂方法模式非常像,不过只是从单一产品变成了产品族。

实现示例

以多平台 UI 渲染为例,要求一套 UI 组件适配 Web 平台和 Android 平台。

java
// 1. 定义抽象产品接口
public interface Button {
    void render();
}

public interface TextBox {
    void render();
}

// 2. 抽象工厂定义抽象方法创建产品
public interface UIFactory {
    Button createButton();

    TextBox createTextBox();
}

// 3. 定义具体产品
public class WebButton implements Button {
    void render() {
        System.out.println("Web 风格按钮");
    }
}

public class WebTextBox implements TextBox {
    void render() {
        System.out.println("Web 风格文本框");
    }
}

public class AndroidButton implements Button {
    void render() {
        System.out.println("Android 风格按钮");
    }
}

public class AndroidTextBox implements TextBox {
    void render() {
        System.out.println("Android 风格文本框");
    }
}

// 4. 定义具体工厂创建具体产品
public class WebUIFactory implements UIFactory {
    Button createButton() {
        return new WebButton();
    }

    TextBox createTextBox() {
        return new WebTextBox();
    }
}

public class AndroidUIFactory implements UIFactory {
    Button createButton() {
        return new AndroidButton();
    }

    TextBox createTextBox() {
        return new AndroidTextBox();
    }
}


// 5. 客户端调用示例
public static void main(String[] args) {
    UIFactory factory = new WebUIFactory();
    Button button = factory.createButton();
    TextBox textBox = factory.createTextBox();
    button.render();
    textBox.render();
}