设计模式——抽象工厂模式

定义:

抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。

概述:一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体工厂

以下是抽象工厂模式的一些常见用途:

  1. 系统独立性:抽象工厂模式可以让客户端与具体类的创建逻辑分离,使得客户端代码不依赖于具体类,从而提高了系统的独立性。

  2. 产品族的创建:抽象工厂模式通常用于创建一系列相关或相互依赖的产品,这些产品被设计成一起使用,例如,在图形用户界面 (GUI) 应用程序中,可能需要一套相同风格的按钮、文本框和窗口。

  3. 跨平台兼容性:抽象工厂模式可以帮助在不同的平台上创建相同风格的产品,而无需修改客户端代码。例如,在开发跨平台的游戏时,可以使用抽象工厂模式创建适配于不同平台的相同类型的游戏对象。

抽象工厂模式核心角色:
 

  1. 抽象工厂(Abstract Factory):声明了一组用于创建产品对象的方法,每个方法对应一种产品类型。抽象工厂可以是接口或抽象类。
  2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体产品对象的实例。
  3. 抽象产品(Abstract Product):定义了一组产品对象的共同接口或抽象类,描述了产品对象的公共方法。
  4. 具体产品(Concrete Product):实现了抽象产品接口,定义了具体产品的特定行为和属性。

抽象工厂模式通常涉及一族相关的产品,每个具体工厂类负责创建该族中的具体产品。客户端通过使用抽象工厂接口来创建产品对象,而不需要直接使用具体产品的实现类。

示例:

假设我们有两种类型的电脑:台式机和笔记本电脑,每种电脑都有不同的规格:高性能和普通型。我们将使用抽象工厂模式来创建这些电脑。

代码:


// 台式机接口
interface Desktop {void displayInfo();
}// 笔记本电脑接口
interface Laptop {void displayInfo();
}// 具体的工厂类
class ConcreteComputerFactory implements ComputerFactory {@Overridepublic Desktop createDesktop() {return new RegularDesktop();}@Overridepublic Laptop createLaptop() {return new HighPerformanceLaptop();}
}// 普通型台式机
class RegularDesktop implements Desktop {@Overridepublic void displayInfo() {System.out.println("这是一台普通的台式电脑。");}
}// 高性能笔记本电脑
class HighPerformanceLaptop implements Laptop {@Overridepublic void displayInfo() {System.out.println("这是一台高性能的笔记本电脑。");}
}// 电脑工厂接口
interface ComputerFactory {Desktop createDesktop(); // 创建台式机Laptop createLaptop();   // 创建笔记本电脑
}public class Main {public static void main(String[] args) {// 创建具体的工厂ComputerFactory factory = new ConcreteComputerFactory();// 创建台式机Desktop desktop = factory.createDesktop();desktop.displayInfo();// 创建笔记本电脑Laptop laptop = factory.createLaptop();laptop.displayInfo();}
}

运行截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS—使用预览器查看应用/服务效果

DevEco Studio为开发者提供了UI界面预览功能,可以查看应用/服务的UI界面效果,方便开发者随时调整界面UI布局。预览器支持布局代码的实时预览,只需要将开发的源代码进行保存,就可以通过预览器实时查看应用/服务运行效果&#xff0c…

Jetpack Compose 可组合项的生命周期

点击查看:可组合项的生命周期 官网 在本页中,您将了解可组合项的生命周期以及 Compose 如何确定可组合项是否需要重组。 生命周期概览 正如管理状态文档中所述,一个组合将描述应用的界面,并通过运行可组合项来生成。组合是描述…

算能RISC-V通用云开发空间编译pytorch @openKylin留档

终于可以体验下risc-v了! 操作系统是openKylin,算能的云空间 尝试编译安装pytorch 首先安装git apt install git 然后下载pytorch和算能cpu的库: git clone https://github.com/sophgo/cpuinfo.git git clone https://github.com/pytorc…

2.5网安学习第二阶段第五周回顾(个人学习记录使用)

本周重点 ①多进程和多线程 1、进程和线程 2、多线程爆破 ②Redis数据库 1、Redis的使用 2、Redis持久化 3、Redis未授权免密登录 ③嗅探和Python攻击脚本 1、嗅探(端口扫描和IP扫描) 2、SCAPY的应用 3、Python攻击脚本(SYN半连接…

CI/CD 之 gitlab-runner 部署与踩坑

前言 去年花时间研究了一下 CI/CD , 自己部署了一套 gitlab-runner 玩了一下,部署过程之后遇到了不少问题,把之前的踩坑与部署记录分享一下。 简介 gitlab-runner是一个开源项目,用于运行 Pipeline 作业并将结果发送回 GitLab。 它与 Git…

NLP_构建GPT模型并完成文本生成任务

文章目录 搭建GPT模型(解码器)构建文本生成任务的数据集训练过程中的自回归文本生成中的自回归(贪婪搜索)完整代码小结 搭建GPT模型(解码器) GPT 只使用了 Transformer的解码器部分,其关键组件…

【探讨】光场显示技术的研究现状与发展趋势

摘要:目前常用的三维显示技术,一般是通过人眼的双目视差和视觉暂留效应实现的三维效果。由于丢失了深度信息,会引起辐辏调节冲突,使观看者产生不适感。光场显示是通过复现物体表面光线的真三维显示技术,其拥有良好的用…

Zabbix 远程监控主机

目录 1、安装 Zabbix 安装客户端 服务端测试通讯 Web页面添加主机 2、监控 Nginx 自定义脚本监控 Nginx web配置台 3、监控 MySQL 配置模版文件 配置Web界面 1、安装 Zabbix node-12 作为zabbix的被监控端,提供mysql服务器,配置zabbix监控node…

(HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕

一、电路接法 电路接法参照江科大视频。 二、相关代码及文件 说明:代码采用hal库,通过修改江科大代码实现。仅OLED.c文件关于引脚定义作了hal库修改,并将宏定义OLED_W_SCL(x)、OLED_W_SDA(x)作了相关修改。 1、OLED.c void OLED_I2C_Init(voi…

Encoder-decoder 与Decoder-only 模型之间的使用区别

承接上文:Transformer Encoder-Decoer 结构回顾 笔者以huggingface T5 transformer 对encoder-decoder 模型进行了简单的回顾。 由于笔者最近使用decoder-only模型时发现,其使用细节和encoder-decoder有着非常大的区别;而huggingface的接口为…

golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

【汽车电子】万字详解汽车标定与XCP协议

XCP协议基础 文章目录 XCP协议基础一、引言1.1 什么是标定1.2 什么时候进行标定1.3 标定的意义 二、XCP协议简介2.1 xcp简介2.2 XCP如何加快开发过程?2.3 XCP的主要作用 三、XCP工作过程3.1 工作过程3.2 通讯模型3.3 测量与标定 四、XCP报文解析4.1 数据包报文格式4…