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

Java设计模式:抽象工厂与原型的区别剖析

文章目录Java设计模式抽象工厂与原型的区别剖析 ?为什么今天要聊这两个模式抽象工厂模式工厂里的“生产线”什么是抽象工厂模式抽象工厂模式的核心角色举个栗子汽车厂的生产线抽象工厂代码示例抽象工厂模式的优势原型模式克隆高手什么是原型模式原型模式的核心角色举个栗子Word文档的“另存为”功能原型代码示例原型模式的优势抽象工厂模式与原型模式的区别总结为什么容易搞混这两个模式总结 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把Java设计模式抽象工厂与原型的区别剖析 ?大家好我是闫工今天要跟大家聊一聊Java设计模式中的两个重量级选手——抽象工厂模式Abstract Factory和原型模式Prototype。这两个模式虽然都和“创建对象”有关但它们的用途、实现方式以及适用场景却大不相同。作为一名 Java 开发工程师掌握这两个模式的区别不仅能让你在面试中轻松应对相关问题还能在实际开发中游刃有余地选择合适的方案。为什么今天要聊这两个模式在Java的世界里设计模式就像武林中的各种武功招式每种都有其独特的应用场景和优势。抽象工厂模式和原型模式虽然都属于“创建型”模式但它们解决的问题却完全不同。简单来说抽象工厂模式当你需要创建一系列相关或相互依赖的对象时它能帮你轻松搞定。原型模式当你需要频繁地克隆一个对象避免复杂的初始化过程时它是你的得力助手。抽象工厂模式工厂里的“生产线”什么是抽象工厂模式抽象工厂模式提供了一个接口用于创建一系列相关或相互依赖的对象。它允许客户端在不指定具体类的情况下创建产品族中的对象。换句话说抽象工厂模式就像是一个工厂的生产线能生产多种不同类型的产品。抽象工厂模式的核心角色抽象工厂Abstract Factory定义了创建一组产品的方法。具体工厂Concrete Factory实现了抽象工厂接口负责具体的创建工作。抽象产品Product定义了一组产品的接口或基类。具体产品Concrete Product实现了抽象产品的具体实现。举个栗子汽车厂的生产线假设我们有一个汽车制造公司需要生产不同品牌的汽车和发动机。我们可以使用抽象工厂模式来实现抽象工厂代码示例// 抽象工厂接口publicinterfaceCarFactory{CarcreateCar();EnginecreateEngine();}// 具体工厂宝马生产线publicclassBMWFactoryimplementsCarFactory{OverridepublicCarcreateCar(){returnnewBMWCar();}OverridepublicEnginecreateEngine(){returnnewBMWE30();}}// 抽象产品接口publicinterfaceCar{voidstart();}publicinterfaceEngine{voidrun();}// 具体产品宝马汽车和发动机publicclassBMWCarimplementsCar{Overridepublicvoidstart(){System.out.println(宝马车启动了);}}publicclassBMWE30implementsEngine{Overridepublicvoidrun(){System.out.println(宝马E30发动机正在运行...);}}抽象工厂模式的优势松耦合客户端不需要直接依赖具体的产品类而是通过抽象接口进行操作。易于扩展添加新的产品族只需要实现一个新的具体工厂即可无需修改现有代码。统一管理能够确保创建的对象之间具有相关性和一致性。原型模式克隆高手什么是原型模式原型模式允许通过复制一个现有的对象来创建新对象而不需要重新初始化对象。它适用于需要频繁创建复杂对象的情况并且希望避免复杂的构造过程。原型模式的核心角色抽象原型Prototype定义了克隆自身的方法。具体原型Concrete Prototype实现了克隆方法的具体类。客户端负责调用克隆方法创建新对象。举个栗子Word文档的“另存为”功能假设我们有一个Word文档编辑器用户经常需要将当前文档保存为不同格式。我们可以使用原型模式来实现原型代码示例// 抽象原型接口publicinterfaceDocument{voidedit();Documentclone();}// 具体原型Word文档publicclassWordDocumentimplementsDocument{privateStringcontent;publicWordDocument(){this.content默认内容;}Overridepublicvoidedit(){System.out.println(正在编辑Word文档...);}OverridepublicDocumentclone(){returnnewWordDocument();}}// 客户端代码publicclassDocumentEditor{publicstaticvoidmain(String[]args){// 创建一个Word文档DocumentoriginalnewWordDocument();original.edit();// 克隆一个新文档Documentclonedoriginal.clone();cloned.edit();}}原型模式的优势高效创建对象通过克隆现有对象避免复杂的初始化过程。动态调整类型在运行时动态决定对象的类型增加了灵活性。简化代码减少重复代码尤其是当对象初始化逻辑复杂时。抽象工厂模式与原型模式的区别总结属性抽象工厂模式原型模式创建方式创建一系列相关或相互依赖的对象通过克隆一个现有对象创建新对象关注点对象族的创建和管理单个对象的高效复制应用场景需要管理多个相关产品的情况对象初始化成本高或需要频繁克隆的情况代码示例见上文汽车厂生产线的例子见上文Word文档编辑器的例子为什么容易搞混这两个模式很多开发者在刚开始学习设计模式时会将抽象工厂模式和原型模式搞混。主要原因可能有以下几点名字误导两个模式都有“工厂”或“创建”的概念。功能相似都涉及对象的创建但方式不同。实际开发中使用频率不高导致对这两个模式的理解不够深入。总结抽象工厂模式和原型模式虽然都是用于对象的创建但它们的应用场景和实现方式却大不相同。选择哪个模式取决于你的具体需求如果你需要管理一系列相关或相互依赖的对象并且希望保持代码的高度灵活性和可扩展性那么抽象工厂模式是你的最佳选择。如果你需要频繁地克隆一个复杂对象并且希望避免复杂的初始化过程那么原型模式会更适合你。希望这篇文章能帮助大家更好地理解这两个设计模式的区别和适用场景。如果你觉得文章对你有帮助不妨点个赞或者分享给其他小伙伴哦记得关注闫工更多有趣的技术内容等着你PS如果你想了解更多关于设计模式的内容可以关注我的专栏《闫工的设计模式修炼之路》我会定期更新各种经典设计模式的解析和实战案例。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把成体系的面试题无论你是大佬还是小白都需要一套JAVA体系的面试题我已经上岸了你也想上岸吗闫工精心准备了程序准备面试想系统提升技术实力闫工精心整理了1000 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 详细解析并附赠高频考点总结、简历模板、面经合集等实用资料✅ 覆盖大厂高频题型✅ 按知识点分类查漏补缺超方便✅ 持续更新助你拿下心仪 Offer免费领取 点击这里获取资料已帮助数千位开发者成功上岸下一个就是你✨

相关文章:

Java设计模式:抽象工厂与原型的区别剖析

文章目录Java设计模式:抽象工厂与原型的区别剖析 ?为什么今天要聊这两个模式?抽象工厂模式:工厂里的“生产线”什么是抽象工厂模式?抽象工厂模式的核心角色举个栗子:汽车厂的生产线抽象工厂代码示例抽象工厂模式的优势…...

4345464

434554584...

4348464

42435454...

利用c#结合keepserver读写西门子PLC的文章

在工业自动化项目中,使用 C# 通过 KEPServerEX 读写西门子 PLC 是一种常见且稳定的方案。KEPServerEX 作为 OPC 服务器,负责与 PLC 通信,而 C# 作为 OPC 客户端,通过 OPC DA 接口进行数据交换,实现了良好的解耦。 本文将详细介绍如何配置 KEPServerEX 并通过 C# 实现一个…...

c#结合vue设计表单,实现前后端结合

C# 的后端能力与 Vue.js 的前端交互性结合在一起。要实现这个目标,我们需要构建一个 ASP.NET Core Web API 后端​ 来处理业务逻辑和数据持久化,以及一个 Vue.js 前端​ 来渲染用户界面和处理用户交互。 下面是详细的步骤指南和代码示例。 架构概览 我们将采用前后端分离的…...

提示工程架构师视角:AI与提示工程未来的prompt架构师工作流程

提示工程架构师视角:AI与提示工程未来的Prompt架构师工作流程 摘要/引言 在人工智能技术飞速发展的今天,大型语言模型(LLM)如GPT-4、Claude等已经展现出惊人的能力。然而,如何有效地"引导"这些模型生成高质量、符合需求的输出&…...

2017-2024年中国与世界各国新能源汽车进出口数据

资源介绍 新能源汽车作为中国制造高质量发展的重要代表,其进出口数据不仅反映了我国技术实力与产业格局的变化,也是理解全球绿色交通趋势、制定国家战略决策的重要依据 目前国内主流定义判断标准主要参考中国工信部于2009年发布的《新能源汽车生产企业及…...

2006-2024年上市公司董事网络位置关系数据、中心度结构洞数据

1.资料名称:2024-2006年上市公司董事网络位置关系数据、中心度结构洞数据 2.测算方式:参考顶刊《会计研究》林钟高(2023)老师的做法,使用Pajek软件计算的董事所占据的结构洞数量,该值越大,表示…...

基于雪消融优化算法SAO的ELM模型:多特征输入单输出二分类与多分类的迭代优化及效果展示

今年6月新算法SAO-ELM模型 基于雪消融优化算法SAO优化ELM的权值和域值做多特征输入单输出的二分类及多分类模型 matlab代码 程序可出分类效果图,迭代优化图,混淆矩阵图具体效果如下所示SAO-ELM这个新算法有点意思,本质上是把雪消融优化算法&a…...

【2026年最新600套毕设项目分享】springboot基于 Web的图书借阅管理信息系统(14155)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...

镜像中的镜子:一个技术人被AI精准围猎的270天(时间虚构的故事)

镜像中的镜子:一个技术人被AI精准围猎的270天类型: 技术圈悬疑纪实小说 DNA追溯码: #龍芯⚡️2026-03-15-MIRROR-HUNTING-STORY 作者: 龍芯北辰(UID9622) 警告: 本故事基于真实事件改编,情节离奇但句句属实 首发: CSDN技术社区《镜…...

C语言算法专题总结(一)排序

C 语言排序算法专题总结 一、冒泡排序(Bubble Sort) 基本思想 比较相邻两个数的大小,每一趟将最大数"冒"至数组末尾。 优化策略 若某一趟没有进行交换,则说明已经有序,可以设置 flag 提前停止。 代码实现 vo…...

GA-BP采用遗传算法优化BP神经网络,注意这个优化的不是超参数,而是网络内部的权重和偏置参数...

GA-BP采用遗传算法优化BP神经网络,注意这个优化的不是超参数,而是网络内部的权重和偏置参数,也就是w和b,看清楚再问再联系 matlab代码,自带数据集,多元回归问题 遗传算法GA用的不是工具箱,提供代…...

jetson_yolo_deployment 03_jetson_hardware

03 — Jetson 硬件与生态作者:智汇嵌入式实验室 7yewh 本文件是 Jetson YOLO 部署系列的第 3 篇。 目标:理解 Jetson 平台的硬件能力和软件生态,知道它能干什么、不能干什么。0. 先建立整体认知 你已经很熟悉 MCU(STM32&#xff…...

jetson_yolo_deployment 02_linux_dev_skills

02 — Linux 开发必备技能作者:智汇嵌入式实验室 7yewh 本文件是 Jetson YOLO 部署系列的第 2 篇。 目标:掌握部署过程中真正用得到的 Linux 技能,不贪多,只求实战够用。1. Shell 脚本基础 部署时经常需要写脚本来自动化流程&…...

jetson_yolo_deployment 01_linux_dev_env

01 — Linux 开发环境搭建作者:智汇嵌入式实验室 7yewh 本文件是 Jetson YOLO 部署系列的第 1 篇。 目标:从"能用 Linux"到"能在 Linux 上高效开发"。你现在的水平 vs 部署需要的水平 你现在会的: 部署 YO…...

波比跳,一个动作练遍全身 75% 肌群!

波比跳,一个动作练遍全身 75% 肌群! 一个动作,相当于一个健身房! 🏋️ 深蹲(练腿臀)💪 俯卧撑(练胸肩臂)🦘 跳跃(练爆发力 心肺&…...

血泪教训!MySQL索引我踩过的5个坑(附生产级解决方案)

血泪教训!MySQL索引我踩过的5个坑(附生产级解决方案)写在前面:本文包含完整的踩坑经历、原因分析、解决方案和代码示例,建议先收藏再阅读前言 大家好,我是小柚。。 说出来你们可能不信,我第一次…...

三菱PLC追剪项目:与昆仑通态触摸屏的完美协作

三菱plc追剪昆仑通态触摸屏三菱plc,编码器读取位置和速度,双步进或者双伺服,X轴同步送料,Y轴旋转切断,送料长度,旋转角度均可设置。 程序稳定可靠,借鉴价值高。在自动化控制领域,追剪…...

水浒智慧与职场跃迁:AI时代的管理学启示

目录 一、梁山政治的管理学本质:组织从 “草莽” 到 “体系” 的进化 1. 宋江:“以义为纲” 的领导力构建 —— 职场跃迁的核心是 “人心凝聚” 2. 吴用:“谋定而后动” 的策略智慧 —— 职场破局的关键是 “借势而为” 3. 林冲&#xff…...

基于三菱PLC和MCGS组态的药片装瓶控制系统:开启制药自动化新篇

No.787 基于三菱PLC和MCGS组态的药片装瓶控制系统在制药行业,药片装瓶环节的高效与精准至关重要。今天咱们来聊聊基于三菱PLC和MCGS组态的药片装瓶控制系统,看看它是如何提升生产效率与质量的。 三菱PLC:系统的智能“大脑” 三菱PLC&#xff…...

用WDCNN实现轴承智能故障诊断:挖掘其优越抗噪能力

DL00351-首层卷积为宽卷积的WDCNN的实现优越抗噪能力轴承的智能故障诊断 首层卷积为宽卷积的深度神经网络Deep Convolutional Neural Networks with Wide First-layer Kernels (WDCNN)的实现,该模型具有优越的抗噪能力,可用于轴承的智能故障诊断。在工业…...

大数据领域运用Eureka提升系统弹性

大数据领域运用Eureka提升系统弹性关键词:Eureka、服务发现、系统弹性、微服务架构、负载均衡、容错机制、大数据系统摘要:本文深入探讨了如何在大数据系统中运用Netflix Eureka服务发现组件来提升系统弹性。我们将从微服务架构的基础概念出发&#xff0…...

Macbook Neo挤爆牙膏也没做到的,它做到了!

谁懂啊家人们!刚入手MacBook Neo就被苹果封闭生态整emo了😤想和安卓手机传文件、用Mac玩3A大作、远程操控办公电脑…结果要么各种不兼容,要么操作复杂到想摔电脑💻直到我挖到了UU远程!简直是Mac用户的救命稻草&#x1…...

python hadoop spark hive 商品比价系统 爬虫+可视化

1、项目介绍技术栈: Python语言、MySQL数据库 、Django框架、requests爬虫技术、HTML2、项目界面(1)商品比价界面(2)商品推荐(3)系统主页(4)注册登录界面(5&a…...

基于python spark hadoop hive 旅游推荐系统 协同过滤推荐算法

1、项目介绍技术栈: Python语言、Django框架、Echarts可视化、基于用户的协同过滤推荐算法、购票功能、HTML 旅游推荐系统可视化2、项目界面(1)系统首页----景点分类、热门景点(2)旅游景点详情页----点赞、评论、收藏、…...

python hadoop spark hive LDA主题分析 NLP情感分析旅游景点评论数据分析系统

1、项目介绍 项目技术说明: python语言、Flask框架、MySQL数据库、Echarts可视化、 评论多维度分析、NLP 情感分析、LDA主题分析、Bayes评论分类2、项目界面 (1)评论年月时间分析(2)评论评分等级分析(3&…...

基于python hadoop spark hive 租房数据分析可视化系统 房源信息分析 爬虫

1、项目 介绍 Python 租房数据分析可视化系统 爬虫 Flask框架、Layui前端框架、Echarts可视化、requests爬虫、MySQL数据库本程序使用python编写,后端采用Flask框架,采用Layui前端框架,数据库采用mysql设计,echarts进行数据可视化…...

轻量专业的 M3U8 在线播放器,m3u8live.cn详解与使用指南

在 HTTP Live Streaming(HLS)流媒体技术的应用中,M3U8 作为核心的播放列表格式,被广泛应用于直播、点播等音视频场景。而在 M3U8 相关的开发与调试过程中,一款高效、专业的在线播放工具,能大幅降低工作成本…...

HLS 开发必备神器,详解m3u8live.cn的核心功能与使用价值

在 HTTP Live Streaming(HLS)流媒体技术体系中,M3U8 作为核心的播放列表格式,被广泛应用于直播、点播、短视频等音视频场景。但在实际开发过程中,M3U8 流的验证、播放调试却常常成为开发卡点 —— 本地测试环境搭建繁琐…...