软件抽象工厂模式

  • 抽象工厂模式
    • 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    • 例子:GUI库,为不同操作系统(Windows, Mac)创建一套风格一致的按钮、文本框等控件。

抽象工厂模式的 Java 实现示例,模拟 GUI 控件库的场景(支持 Windows 和 Mac 风格的按钮和文本框):

java 复制代码
// 1. 定义抽象产品接口:按钮和文本框
interface Button {
    void render();
}

interface TextBox {
    void display();
}

// 2. 实现具体产品:Windows 风格的控件
class WindowsButton implements Button {
    @Override
    public void render() {
        System.out.println("渲染一个 Windows 风格的按钮");
    }
}

class WindowsTextBox implements TextBox {
    @Override
    public void display() {
        System.out.println("显示一个 Windows 风格的文本框");
    }
}

// 3. 实现具体产品:Mac 风格的控件
class MacButton implements Button {
    @Override
    public void render() {
        System.out.println("渲染一个 Mac 风格的按钮");
    }
}

class MacTextBox implements TextBox {
    @Override
    public void display() {
        System.out.println("显示一个 Mac 风格的文本框");
    }
}

// 4. 定义抽象工厂接口:用于创建一套控件
interface GUIFactory {
    Button createButton();
    TextBox createTextBox();
}

// 5. 实现具体工厂:Windows 工厂和 Mac 工厂
class WindowsFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public TextBox createTextBox() {
        return new WindowsTextBox();
    }
}

class MacFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new MacButton();
    }

    @Override
    public TextBox createTextBox() {
        return new MacTextBox();
    }
}

// 6. 客户端代码:根据配置选择工厂并创建控件
public class AbstractFactoryDemo {
    public static void main(String[] args) {
        // 模拟配置:根据系统选择工厂
        String osType = "Windows"; // 可替换为 "Mac"
        GUIFactory factory;

        if (osType.equalsIgnoreCase("Windows")) {
            factory = new WindowsFactory();
        } else {
            factory = new MacFactory();
        }

        // 创建一套风格一致的控件
        Button button = factory.createButton();
        TextBox textBox = factory.createTextBox();

        // 使用控件
        button.render();
        textBox.display();
    }
}
相关推荐
看山是山_Lau14 天前
抽象工厂模式:一整套对象族如何统一创建?
设计模式·抽象工厂模式
多加点辣也没关系21 天前
设计模式-抽象工厂模式
java·设计模式·抽象工厂模式
咖啡八杯21 天前
GoF设计模式——抽象工厂模式
java·后端·spring·设计模式·抽象工厂模式
Alex艾力的IT数字空间1 个月前
再思“把事情做对”与“把事情做好”的辩证关系与先后顺序
信息可视化·需求分析·学习方法·抽象工厂模式·远程工作·原型模式·中介者模式
无敌秋1 个月前
C++ 抽象工厂模式实战指南
开发语言·c++·抽象工厂模式
妙蛙种子3112 个月前
【Java设计模式 | 创建者模式】 抽象工厂模式
java·开发语言·后端·设计模式·抽象工厂模式
yaaakaaang2 个月前
三、抽象工厂模式
java·抽象工厂模式
无籽西瓜a2 个月前
【西瓜带你学设计模式 | 第四期 - 抽象工厂模式】抽象工厂模式 —— 定义、核心结构、实战示例、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·抽象工厂模式
君主黑暗2 个月前
设计模式-抽象工厂模式
设计模式·抽象工厂模式
bmseven2 个月前
23种设计模式 - 抽象工厂模式(Abstract Factory)
设计模式·抽象工厂模式