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

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

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

以下是一个简单的抽象工厂模式的 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 窗口
    }
}

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

相关推荐
liang_jy18 分钟前
观察者模式
设计模式·面试
~山有木兮2 小时前
C++设计模式 - 单例模式
c++·单例模式·设计模式
周某某~3 小时前
四.抽象工厂模式
java·设计模式·抽象工厂模式
勤奋的知更鸟4 小时前
Java编程之组合模式
java·开发语言·设计模式·组合模式
哆啦A梦的口袋呀4 小时前
基于Python学习《Head First设计模式》第九章 迭代器和组合模式
python·学习·设计模式
on the way 1234 小时前
行为型设计模式之Mediator(中介者)
java·设计模式·中介者模式
周某某~6 小时前
二.单例模式‌
java·单例模式·设计模式
十五年专注C++开发6 小时前
设计模式之单例模式(二): 心得体会
开发语言·c++·单例模式·设计模式
hstar95276 小时前
三十五、面向对象底层逻辑-Spring MVC中AbstractXlsxStreamingView的设计
java·后端·spring·设计模式·架构·mvc
pengyu7 小时前
【Java设计原则与模式之系统化精讲:壹】 | 编程世界的道与术(实战指导篇)
java·后端·设计模式