美文网首页
抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式(Abstract Factory Pattern)

作者: 肖哥弹架构 | 来源:发表于2024-07-15 09:21 被阅读0次
image.png

开发一个支持多种主题风格的桌面应用程序,例如浅色主题和深色主题。每种主题风格都有其特定的按钮(Button)、窗口(Window)和滑块(Slider)等界面组件。我们希望应用程序能够根据用户选择的主题动态加载相应的界面组件。

肖哥弹架构 跟大家“弹弹” 设计模式,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

2、为什么要使用抽象工厂模式

抽象工厂模式允许我们创建一系列相关或依赖的对象族,而不需要指定它们具体的类。这样,当添加新的主题风格时,我们只需增加新的具体工厂和组件类,无需修改现有代码。

4. 业务抽象工厂模式图

image.png

4. 业务抽象工厂模式图

image.png

5. 业务代码参考

浅色主题工厂

    interface GUIComponent {
        void paint();
    }

    class LightButton implements GUIComponent {
        public void paint() {
            System.out.println("Painting Light Theme Button");
        }
    }

    class LightWindow implements GUIComponent {
        public void paint() {
            System.out.println("Painting Light Theme Window");
        }
    }

    class LightSlider implements GUIComponent {
        public void paint() {
            System.out.println("Painting Light Theme Slider");
        }
    }

    class LightThemeFactory implements ThemeFactory {
        public GUIComponent createButton() {
            return new LightButton();
        }

        public GUIComponent createWindow() {
            return new LightWindow();
        }

        public GUIComponent createSlider() {
            return new LightSlider();
        }
    }

深色主题工厂

    class DarkButton implements GUIComponent {
        public void paint() {
            System.out.println("Painting Dark Theme Button");
        }
    }

    class DarkWindow implements GUIComponent {
        public void paint() {
            System.out.println("Painting Dark Theme Window");
        }
    }

    class DarkSlider implements GUIComponent {
        public void paint() {
            System.out.println("Painting Dark Theme Slider");
        }
    }

    class DarkThemeFactory implements ThemeFactory {
        public GUIComponent createButton() {
            return new DarkButton();
        }

        public GUIComponent createWindow() {
            return new DarkWindow();
        }

        public GUIComponent createSlider() {
            return new DarkSlider();
        }
    }

应用程序使用抽象工厂

    interface ThemeFactory {
        GUIComponent createButton();
        GUIComponent createWindow();
        GUIComponent createSlider();
    }

    public class DesktopApplication {
        private GUIComponent button, window, slider;

        public DesktopApplication(ThemeFactory themeFactory) {
            this.button = themeFactory.createButton();
            this.window = themeFactory.createWindow();
            this.slider = themeFactory.createSlider();
        }

        public void render() {
            button.paint();
            window.paint();
            slider.paint();
        }

        public static void main(String[] args) {
            ThemeFactory lightThemeFactory = new LightThemeFactory();
            new DesktopApplication(lightThemeFactory).render();

            ThemeFactory darkThemeFactory = new DarkThemeFactory();
            new DesktopApplication(darkThemeFactory).render();
        }
    }

6. 使用抽象工厂的好处

抽象工厂模式解决了以下问题并带来了以下好处:

  • 解耦:客户端不需要知道具体的组件类,只需要知道组件的接口。
  • 扩展性:添加新的主题风格时,只需增加相应的具体工厂和组件类。
  • 一致性:确保应用程序使用相同主题下的所有组件。

7. 其他使用抽象工厂场景参考

抽象工厂模式适用于以下业务场景:

  • 多产品系列:如电子产品的不同型号。
  • 不同操作系统的GUI组件:如Windows、macOS、Linux下的界面组件。
  • 开源Bean创建框架:如BeanFactoryApplicationContext

8. 可参考开源框架

  • Java Swing:提供了不同外观的组件集合。
  • Spring Bean:ApplicationContext 提供了Bean创建。

总结

抽象工厂模式是一种强大的创建型模式,它允许系统在不修改现有代码的情况下引入新的产品族。通过将创建逻辑封装在不同的工厂类中,抽象工厂模式提高了系统的灵活性和可扩展性。

历史热点文章

相关文章

网友评论

      本文标题:抽象工厂模式(Abstract Factory Pattern)

      本文链接:https://www.haomeiwen.com/subject/bsochjtx.html