JAVA设计模式——(十)抽象工厂模式(Abstract Factory Pattern)

JAVA设计模式------(十)抽象工厂模式(Abstract Factory Pattern)

介绍

抽象工厂模式在工厂模式的基础上,适配的对象变为一组相关的对象,为这一组对象提供一个接口。

理解

好比一个手机,提供了很多个app的入口,想使用哪个,就点开哪个,那工厂类也替我们完成这样的工作,而不必过多关心找不到使用应用的入口。

实现

工厂接口

java 复制代码
package cn.sh.designepattern.example01;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/5/4 17:06
 * @Contact 643947568@qq.com
 */
public interface ApplicationFactory {
    public Application1 createApplication1();

    public Application2 createApplication2();
}

工厂实现类

java 复制代码
package cn.sh.designepattern.example01;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/5/4 17:06
 * @Contact 643947568@qq.com
 */
public class ActualApplicationFactory implements ApplicationFactory {
    @Override
    public Application1 createApplication1() {
        return new Application1();
    }

    @Override
    public Application2 createApplication2() {
        return new Application2();
    }
}

应用类

java 复制代码
package cn.sh.designepattern.example01;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/5/4 17:03
 * @Contact 643947568@qq.com
 */
public interface Application {
    public void enterApplication();
    public void executeApplication();
    public void exitApplication();
}

应用类实现

两个子类

java 复制代码
package cn.sh.designepattern.example01;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/5/4 17:04
 * @Contact 643947568@qq.com
 */
public class Application1 implements Application {
    @Override
    public void enterApplication() {
        System.out.println("进入应用1");
    }

    @Override
    public void executeApplication() {
        System.out.println("执行应用1");
    }

    @Override
    public void exitApplication() {
        System.out.println("退出应用1");
    }
}
java 复制代码
package cn.sh.designepattern.example01;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/5/4 17:04
 * @Contact 643947568@qq.com
 */
public class Application2 implements Application {
    @Override
    public void enterApplication() {
        System.out.println("进入应用1");
    }

    @Override
    public void executeApplication() {
        System.out.println("执行应用1");
    }

    @Override
    public void exitApplication() {
        System.out.println("退出应用1");
    }
}

测试

如下代码,创建工厂类。然后从工厂类决定创建哪个Application子类的实例。

java 复制代码
package cn.sh.designepattern.example01;

/**
 * @Author song
 * @Version 0.0.1
 * @Date 2025/4/29 11:45
 * @Contact 643947568@qq.com
 */
public class Main {
    public static void main(String[] args) {
        ApplicationFactory actualApplicationFactory = new ActualApplicationFactory();
        Application1 application1 = actualApplicationFactory.createApplication1();
        Application2 application2 = actualApplicationFactory.createApplication2();

        application1.enterApplication();
        application1.executeApplication();
        application1.exitApplication();

        application2.enterApplication();
        application2.executeApplication();
        application2.exitApplication();
    }
}

改造工厂类

可以采用泛型改造工厂类,使用反射创建,减少代码的冗余,具体可见工厂模式中的实现。

应用

对于多个对象,他们之间的存在着共通的实现逻辑,就好比手机的app,都需要我们在手机打开一样,而不用关心底层的实现逻辑,即使换了一个操作系统,苹果手机上也只需要更换一套工厂类,处理不同的系统信息。

相关推荐
刀法如飞39 分钟前
领域驱动 vs 本体驱动:DDD 代码建模与 Ontology 语义建模的对比分析
设计模式·架构设计·领域驱动
北城以北888841 分钟前
RocketMQ简介
java·spring boot·后端·rocketmq
折哥的程序人生 · 物流技术专研8 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
一条泥憨鱼8 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
云烟成雨TD8 小时前
Spring AI Alibaba 1.x 系列【78】沙箱(Sandbox)
java·人工智能·spring
程序员二叉8 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
周航宇JoeZhou9 小时前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
好家伙VCC9 小时前
Web Components主题热切换方案揭秘
java·前端
慕木沐9 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
焦虑的说说10 小时前
秒杀系统设计方案
java