[设计模式] 抽象工厂模式简易案例

定义:提供一个接口来创建一系列相关或依赖对象,而无需指定其具体类。

痛点:当需要创建一组相关对象,例如操作系统的不同界面组件(按钮、文本框等)时,抽象工厂模式非常有用。

以下是一个简单的抽象工厂模式的 Java 示例,假设你要创建不同类型的按钮和窗口组件。

首先,定义抽象按钮类 Button 和抽象窗口类 Window:

java 复制代码
// 抽象按钮类
public abstract class Button {
    public abstract void paint();
}

// 抽象窗口类
public abstract class Window {
    public abstract void render();
}

然后,创建具体的按钮类 LinuxButton 和 WindowsButton,以及具体的窗口类 LinuxWindow 和 WindowsWindow:

java 复制代码
// 具体的 Linux 按钮类
public class LinuxButton extends Button {
    @Override
    public void paint() {
        System.out.println("Linux 按钮");
    }
}

// 具体的 Windows 按钮类
public class WindowsButton extends Button {
    @Override
    public void paint() {
        System.out.println("Windows 按钮");
    }
}

// 具体的 Linux 窗口类
public class LinuxWindow extends Window {
    @Override
    public void render() {
        System.out.println("Linux 窗口");
    }
}

// 具体的 Windows 窗口类
public class WindowsWindow extends Window {
    @Override
    public void render() {
        System.out.println("Windows 窗口");
    }
}

接下来,定义抽象工厂类 UIFactory,它包含创建按钮和窗口的抽象方法:

java 复制代码
public abstract class UIFactory {
    public abstract Button createButton();
    public abstract Window createWindow();
}

创建具体的工厂类 LinuxUIFactory 和 WindowsUIFactory,分别用于创建 Linux 风格和 Windows 风格的按钮和窗口组件:

java 复制代码
// 具体的 Linux UI 工厂
public class LinuxUIFactory extends UIFactory {
    @Override
    public Button createButton() {
        return new LinuxButton();
    }

    @Override
    public Window createWindow() {
        return new LinuxWindow();
    }
}

// 具体的 Windows UI 工厂
public class WindowsUIFactory extends UIFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public Window createWindow() {
        return new WindowsWindow();
    }
}

最后,你可以使用抽象工厂模式来创建不同风格的按钮和窗口组件:

java 复制代码
public class Main {
    public static void main(String[] args) {
        // 创建 Linux 风格的 UI 组件
        UIFactory linuxFactory = new LinuxUIFactory();
        Button linuxButton = linuxFactory.createButton();
        Window linuxWindow = linuxFactory.createWindow();

        linuxButton.paint(); // 输出:Linux 按钮
        linuxWindow.render(); // 输出:Linux 窗口

        // 创建 Windows 风格的 UI 组件
        UIFactory windowsFactory = new WindowsUIFactory();
        Button windowsButton = windowsFactory.createButton();
        Window windowsWindow = windowsFactory.createWindow();

        windowsButton.paint(); // 输出:Windows 按钮
        windowsWindow.render(); // 输出:Windows 窗口
    }
}

这个示例演示了抽象工厂模式的用法,根据不同的工厂对象创建了不同风格的按钮和窗口组件,而不需要关心它们的具体实现类。这种方式有助于创建一组相关或依赖的对象,同时保持代码的灵活性和可维护性。

相关推荐
蝸牛ちゃん34 分钟前
设计模式(十二)结构型:享元模式详解
设计模式·系统架构·软考高级·享元模式
蝸牛ちゃん4 小时前
设计模式(十三)结构型:代理模式详解
设计模式·系统架构·代理模式·软考高级
贱贱的剑4 小时前
8. 状态模式
设计模式·状态模式
永卿00119 小时前
设计模式-迭代器模式
java·设计模式·迭代器模式
使二颗心免于哀伤19 小时前
《设计模式之禅》笔记摘录 - 10.装饰模式
笔记·设计模式
Amagi.1 天前
Java设计模式-建造者模式
java·设计模式·建造者模式
源代码•宸2 天前
深入浅出设计模式——创建型模式之工厂模式
设计模式
天天进步20152 天前
设计模式在Java中的实际应用:单例、工厂与观察者模式详解
java·观察者模式·设计模式
尘似鹤2 天前
c++注意点(12)----设计模式(生成器)
c++·设计模式
归云鹤2 天前
设计模式十:单件模式 (Singleton Pattern)
单例模式·设计模式