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

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

定义:

抽象工厂模式(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();}
}

运行截图:

相关文章:

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

定义: 抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。 概述:一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体…...

详解编译和链接!

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理 2.2 编译 2.3 汇编 2.4 链接 3. 运行环境 4.完结散花 悟已往之不谏,知来者犹可追 创作不易,宝子们!如果这篇文章对你们…...

力扣226 翻转二叉树 Java版本

文章目录 题目描述解题思路代码 题目描述 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 示例 2: 输入:root…...

免费的数据恢复软件哪个好?这10个数据恢复软件可以试试

遇到电脑、硬盘或U盘等设备中数据丢失,不用着急,数据恢复软件来帮你。 在遇到数据丢失的问题时,很多朋友都会很着急也不知道该怎么办。作为数据恢复小白,我们可以选择使用数据恢复软件进行扫描恢复。现在市面上的数据恢复软件很多…...

力扣2476二叉搜索树最近节点查询

题目来源 力扣2476二叉搜索树最近节点查询 题目概述 给你一个 二叉搜索树 的根节点 root ,和一个由正整数组成、长度为 n 的数组 queries 。 请你找出一个长度为 n 的 二维 答案数组 answer ,其中 answer[i] [mini, maxi] : mini 是树中…...

板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程:第六节 HttpSession对象全解 一、什么是HttpSessionSession的本质 二、创建Seesion及常用方法三、Session域对象四、Session对象的销毁 在上一节中,我们学习了Servlet五大对象里的第三个Cookie对象,但Cookie是有大小限制和…...

后端设计PNR一点总结

条条大路通罗马 在追求极致PPA的过程中,时序问题总是可以解决 方法总比困难多 关键问题其实就是控制delay 不多不少,简单总结二十一条(欢迎大家评论区继续发挥): module padding的设置,可以有效解决congestion问题,factor自己try,命令:setPlaceMode -place_global…...

BI 数据分析,数据库,Office,可视化,数据仓库

AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 Mysql 8.0 54集 Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战, ETL Informatica 数据仓库案例实战 51集 Excel 2021实操 100集, Excel 2021函数大全 80集 Excel 2021…...

汽车信息安全--S32K3的HSE如何与App Core通信(1)?

目录 1.S32K3 网络安全架构 2. MU的通信流程 2.1 总体描述 2.2 Host 消息类型 2.3 寄存器概述...

arcgisPro制图输出

1、设置地图底图 2、导入数据 3、 设置图形颜色,如下:右键“浙江省”数据层,选择符号系统 4、在右侧可看到打开的符号系统栏,进行如下设置: 5、移除“其他所有值”项,如下: 6、设置图形轮廓,如下…...

产品化Chatgpt所面临的五大技术挑战

2022年11月,ChatGPT横扫全球,成为应用人工智能(AI)领域迄今为止最令人惊叹的“哇!”时刻,也是当前科技投资激增的催化剂。2023年11月,首席执行官Sam Altman宣布该产品周用户量达到1亿&#xff0…...

8.qt5使用opencv的库函数打开图片

1.配置opencv动态库的环境变量 2.在创建的qt工程中加入如下opencv代码,具体代码如下: 使用opencv库函数显示图片...

学习 python的第四天,顺便分享两首歌:we don‘ talk anymore,You ‘re Still The One

诸君晚上好,现在是🌃晚上,今天是学习python的第四个学习日,不知不觉学了四天了,还是那句话:不积跬步无以至千里、不积小流无以成江海! 暂时回顾下前面的学习日吧: 第一个学习日----…...

uniapp:APP端webview拦截H5页面跳转,华为市场发布需要限制webview的H5页面跳转

在使用uniapp开发APP项目时,华为市场上线APP会被打回来:您的应用内容存在点击跳转至第三方应用市场或游戏中心下载渠道的问题,不符合华为应用市场审核标准。 华为审核指南4.6 因此可以考虑下面的处理方式,通过拦截webview页面的…...

[HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...

计算机网络实验六 OSPF

一、实验目的和要求 1、掌握 OSPF 的基本配置方法; 2、理解 OSPF 的工作原理。见实验指导书 二、实验环境 1、运行 Windows 2008 Server/XP/7 操作系统的 PC 一台。 2、PacketTracer。 三、实验内容与过程(实验题目和代码) 实验内容: 根据以下任务配置网络:某单位拥…...

亿道丨三防平板丨加固平板丨为零售业提供四大优势

随着全球经济的快速发展,作为传统行业的零售业也迎来了绝佳的发展机遇,在互联网智能化的大环境下,越来越多的零售企业选择三防平板电脑作为工作中的电子设备。作为一种耐用的移动选项,三防平板带来的不仅仅是坚固的外壳。坚固耐用…...

RK3568平台开发系列讲解(Linux系统篇)SPI 客户端通信

🚀返回专栏总目录 文章目录 一、spi_transfer二、spi_message三、初始化沉淀、分享、成长,让自己和他人都能有所收获!😄 SPI I/O模型由一组队列消息组成。我们提交一个或多个struct spi_message结构时,这些结构以同步或异步方式处理完成。单个消息由一个或多个struct sp…...

MySql-DQL-聚合函数

目录 聚合函数统计该企业员工数量count(字段)count(常量)count(*) 统计该企业最早入职的员工统计该企业最迟入职的员工统计该企业员工 ID 的平均值统计该企业员工的 ID 之和 聚合函数 之前我们做的查询都是…...

Java:获取PDF文件的总页数

引入依赖 <!--pdf--> <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> </dependency>代码工具类 package com.example.util;import org.apache.pdfbox.p…...

如何用d2s-editor高效管理暗黑破坏神2存档:终极可视化编辑指南

如何用d2s-editor高效管理暗黑破坏神2存档&#xff1a;终极可视化编辑指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款免费开源的Web版暗黑破坏神2存档编辑器&#xff0c;它将复杂的二进制存档文件转化为直…...

避开这些坑!MoveIt C++编程中setGoalTolerance、computeCartesianPath等关键函数使用详解与调试技巧

MoveIt C编程避坑指南&#xff1a;关键函数深度解析与实战调试技巧 在机器人运动规划领域&#xff0c;MoveIt作为ROS生态中的核心组件&#xff0c;为开发者提供了强大的功能接口。然而在实际C编程中&#xff0c;许多开发者往往陷入看似简单却暗藏玄机的函数调用陷阱。本文将聚焦…...

WRF风场后处理实战:用Python+Cartopy绘制500hPa风场矢量图(附完整代码)

WRF风场后处理实战&#xff1a;用PythonCartopy绘制500hPa风场矢量图&#xff08;附完整代码&#xff09; 气象数据分析中&#xff0c;风场可视化是理解大气环流特征的关键环节。WRF&#xff08;Weather Research and Forecasting&#xff09;模式输出的数据包含丰富的三维风场…...

ROS2实战:从rclpy到rcl,手把手拆解一个Publisher的完整创建流程(附代码)

ROS2深度解析&#xff1a;从Python接口到C层实现的Publisher全链路拆解 在机器人操作系统ROS2的架构中&#xff0c;理解从高级语言接口到底层实现的完整调用链路是开发者进阶的必经之路。本文将聚焦一个核心场景&#xff1a;创建一个Publisher对象时&#xff0c;从Python层的r…...

TypeScript迁移工具ts-migrate版本兼容性终极指南:如何确保JavaScript到TypeScript平滑升级

TypeScript迁移工具ts-migrate版本兼容性终极指南&#xff1a;如何确保JavaScript到TypeScript平滑升级 【免费下载链接】ts-migrate A tool to help migrate JavaScript code quickly and conveniently to TypeScript 项目地址: https://gitcode.com/gh_mirrors/ts/ts-migra…...

Qwen2.5-32B-Instruct开发指南:vscode安装与插件配置

Qwen2.5-32B-Instruct开发指南&#xff1a;vscode安装与插件配置 1. 引言 如果你正准备开始使用Qwen2.5-32B-Instruct这个强大的AI模型进行开发&#xff0c;那么一个高效的编程环境就是你的第一站。作为阿里云推出的320亿参数指令微调模型&#xff0c;Qwen2.5-32B-Instruct在…...

3个魔法时刻:如何让Switch手柄在PC上获得新生

3个魔法时刻&#xff1a;如何让Switch手柄在PC上获得新生 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_mirro…...

工业质检新革命:无需标注数据,用ChatGPT式对话完成目标定位

工业质检新革命&#xff1a;无需标注数据&#xff0c;用ChatGPT式对话完成目标定位 1. 传统工业质检的痛点与挑战 在制造业的质检环节中&#xff0c;目标定位一直是个技术难题。传统方法通常需要&#xff1a; 大量标注数据训练专用模型针对每种产品定制算法频繁调整参数适应…...

高效解决Magpie插件更新难题:完全掌握图像增强功能升级指南

高效解决Magpie插件更新难题&#xff1a;完全掌握图像增强功能升级指南 【免费下载链接】Magpie An all-purpose window upscaler for Windows 10/11. 项目地址: https://gitcode.com/gh_mirrors/mag/Magpie 识别插件更新需求&#xff1a;为何及时升级至关重要 在使用M…...

Android-Animation-Set转场动画实战:共享元素与Activity切换的完美结合

Android-Animation-Set转场动画实战&#xff1a;共享元素与Activity切换的完美结合 【免费下载链接】Android-Animation-Set :books: Android 所有动画系列详尽教程。 Explain all animations in Android. 项目地址: https://gitcode.com/gh_mirrors/an/Android-Animation-S…...