当前位置: 首页 > news >正文

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

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

  • 介绍
  • 理解
  • 实现
    • 工厂接口
    • 工厂实现类
    • 应用类
    • 应用类实现
    • 测试
    • 改造工厂类
  • 应用

介绍

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

理解

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

实现

工厂接口

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();
}

工厂实现类

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 {@Overridepublic Application1 createApplication1() {return new Application1();}@Overridepublic Application2 createApplication2() {return new Application2();}
}

应用类

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();
}

应用类实现

两个子类

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 {@Overridepublic void enterApplication() {System.out.println("进入应用1");}@Overridepublic void executeApplication() {System.out.println("执行应用1");}@Overridepublic void exitApplication() {System.out.println("退出应用1");}
}
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 {@Overridepublic void enterApplication() {System.out.println("进入应用1");}@Overridepublic void executeApplication() {System.out.println("执行应用1");}@Overridepublic void exitApplication() {System.out.println("退出应用1");}
}

测试

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

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,都需要我们在手机打开一样,而不用关心底层的实现逻辑,即使换了一个操作系统,苹果手机上也只需要更换一套工厂类,处理不同的系统信息。

相关文章:

  • PostgreSQL 的 REINDEX 命令
  • LeetCode 2071 你可以安排的最多任务数目 题解(附带自己的错误做题思路 过了25/49)
  • 个人健康中枢的多元化AI网络革新与精准健康路径探析
  • 【数据结构】励志大厂版·初阶(复习+刷题)排序
  • linux 使用nginx部署ssl证书,将http升级为https
  • CF1000E We Need More Bosses
  • 什么是DGI数据治理框架?
  • 【Python】一直没搞懂生成器是什么。。
  • Fine Structure-Aware Sampling(AAAI 2024)论文笔记和启发
  • Milvus(13):自定义分析器、过滤器
  • Prompt compress 技术探究-LLMLingua
  • 【Linux】深入理解程序地址空间
  • WPF中Behaviors
  • [特殊字符] 人工智能大模型之开源大语言模型汇总(国内外开源项目模型汇总) [特殊字符]
  • leetcode 59. 螺旋矩阵 II
  • 大连理工大学选修——图形学:第二章 计算机图形硬件及绘图系统
  • Git推送大文件导致提交回退的完整解决记录
  • 短信侠 - 自建手机短信转发到电脑上并无感识别复制验证码,和找手机输验证码说再见!
  • LLM论文笔记 28: Universal length generalization with Turing Programs
  • 365打卡第R6周: LSTM实现糖尿病探索与预测
  • 巴菲特股东大会精华版:批评拿贸易当武器,宣布年底交班
  • 张求会谈陈寅恪的生前身后事
  • 著名医学翻译家王贤才逝世,享年91岁
  • 商务部新闻发言人就中美经贸对话磋商情况答记者问
  • 全国人民代表大会常务委员会公告〔十四届〕第十号
  • 国家卫健委有关负责人就白皮书发布答记者问