Java设计模式(原型模式)

news2024/10/1 17:27:41
定义

       使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。

角色

       Prototype(抽象原型角色)

       ConcretePrototype(具体原型角色)

       Client(客户端角色

优点

       简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率

       扩展性较好

       提供了简化的创建结构,原型模式中产品的复制是通过封装在原型类中的克隆方法实现的,无需专门的工厂类来创建产品

       可以使用深克隆的方式保存对象状态,以便在需要的时候使用,可辅助实现撤销操作

缺点

       需要为每一个类配备一个克隆方法,而且该克隆方法位于一个类的内部,当对已有的类进行改造时,需要修改源代码,违背了开闭原则

       在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重嵌套引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来可能会比较麻烦

适用场景

       创建新对象成本较大,新对象可以通过复制已有对象来获得,如果是相似对象,则可以对其成员变量稍作修改

       系统要保存对象的状态,而对象的状态变化很小

       需要避免使用分层次的工厂类来创建分层次的对象,并且类的实例对象只有一个或很少的几个组合状态,通过复制原型对象得到新实例可能比使用构造函数创建一个新实例更加方便

案例

       使用某OA系统时,有些岗位的员工发现他们每周的工作都大同小异,因此在填写工作周报时很多内容都是重复的,为了提高工作周报的创建效率,大家迫切地希望有一种机制能够快速创建相同或者相似的周报,包括创建周报的附件。

类图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java网络编程、TCP、UDP、Socket通信---初识版

标题 InetAddress----IP地址端口号协议(UDP/TCP)JAVA操作-UDP一发一收模式多发多收 JAVA操作-TCP一发一收多发多收 实现群聊功能BS架构线程池优化 InetAddress----IP地址 端口号 协议(UDP/TCP) JAVA操作-UDP 一发一收模式 多发多收…

用Java手写jvm之模拟数组相关操作

写在前面 本文看下如何模拟数组相关的操作,主要是实现数组相关的指令,关于数组相关的指令可以参考这篇文章。 1:正文 简单起见这里我们仅仅实现int基础数据类型的一维数组。 newarray指令对应的类 package com.dahuyou.tryy.too.simulat…

猫咪不爱喝水又挑食,终于找到适合的补水罐

我已经被她搞疯掉了,养了快两年,特别不爱喝水。喂的是干粮,干粮本身就水少,加上她不爱喝水,我都怀疑它一天有没喝够20ml没有,太可怕了,只能拿针管喂。我看过很多科普,换过每天勤换水,水碗离猫粮很远,水碗不会太小不存在…

2025年第六届教育和信息技术进展国际会议(AEIT 2025)将在日本福冈召开!

2025 第六届教育和信息技术进展国际会议将于 2025 年 1 月 10-12 日在日本福冈举行,AEIT2025旨在为全世界的科学家、研究人员、工程师和工业从业人员提供一个良好的论坛,展示和讨论教育技术领域的最新技术进展以及未来的发展方向和趋势。 会议官网&#…

【HarmonyOS NEXT星河版开发学习】小型测试案例08-人气卡片

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 鸿蒙开发中的绝对定位和层级是关键的布局和设计概念,它们通过特定的属性和方式决定了组件在界面上的位置和层叠顺序。 知识…

Fast Planner规划算法(三)—— Fast Planner后端之轨迹优化与轨迹优化与时间重分配

本系列文章用于学习记录Fast-Planner规划算法的相关内容,主要学习资料是深蓝学院的移动机器人运动规划课程 三、Fast Planner后端之轨迹优化 在上一篇文章中,我们给出了 Fast Planner中的B样条曲线的表达式,在给定时间区间后,唯一…

【从零开始一步步学习VSOA开发】订阅发布变速器

订阅发布变速器 概念 在许多场景中,我们需要控制发布频率。例如,一个 UI 界面不能过快的接收处理信息,而此时发布者的发布频率又非常快。在这种场景下,我们需要改变发布的频率。 使用 VSOA Regulator 可以解决这个问题&#xff…

Kafka + Kraft 集群搭建教程,附详细配置及自动化安装脚本

本文主要介绍 kafka kraft 搭建过程,主要用途是为了日志采集,所以搭建相对比较简单暴力,不过也可以作为一个参考供大家学习,主打一个能用管跑(调优啊,参数解释啊,原理啊,太枯燥了&a…

其实PMP考试真的不需要焦虑

在考PMP之前,觉得报名费好贵很可怕,很怕自己考不过然后3900打水漂~然后我自己慢慢悠悠跟着老师安排来,2个月就上岸啦~担心真的是多余的! 问了一下培训班的小伙伴,好像都过了。听说PMP在国内的通过率高达90%不知道真假…

高频焊机电源模型建立及谐波分析

1、仿真建模工具 本文的仿真建模工具软件采用MATLAB7.0,即目前工程领域最为流行的软件。MATLAB把计算、可视化、程序设计融入到了一个交互的工作环境中,已经成为电力系统仿真、自动控制理论、数字信号处理、图像处理等领域的常用工具软件。MATLAB中的SIM…

解锁数据“智能”背后的秘密

在这个被数据洪流包围的时代,每一秒都有无数的信息在生成、传递、分析。但你是否曾好奇,这些数据是如何从简单的数字、文字转化为推动社会进步、改变生活方式的“智能”力量的?今天,就让我们一起揭开数据“智能”背后的神秘面纱&a…

在Excel中启用宏 (~ ̄▽ ̄)~

一、启用宏 打开任意Excel,点击屏幕左上角的文件选项,然后选择Excel选项窗口。在Excel选项窗口中,选择信任中心按钮;在信任中心设置窗口中,选择宏设置,启用所有宏(不推荐,潜在风险&a…

鸿蒙OS开发使用Canvas组件绘制天气曲线图

参考下文: 鸿蒙征文 | 使用Canvas组件绘制天气曲线图_harmonyos_鸑鷟407-HarmonyOS开发者社区效果图: 原理 使用贝塞尔曲线 首先可以了解一下贝塞尔曲线。 如果看不懂也没关系,这里会直接讲绘制曲线的步骤。 使用CanvasRenderingContext2D对象…

VS code初学笔记

一、调试 1.1添加查看全部数组元素 监视->*(type(*)[number])begin 其中type表示类型int、char等。number表示要查看的数量。begin是起始地址指针,即数组名。

github使用gh-pages部署vue静态网站(简单易懂)

github使用gh-pages部署vue静态网站 当我们想把自己的网站部署到一个静态网站上,Github Pages是一个很好的选择(稳定、可靠、不花钱) 假设你已经有一个项目并且已经发布到github上了,先把项目git clone到本地 ,接着在…

第二季度云计算市场份额榜单:微软下滑,谷歌上升,AWS仍保持领先

2024 年第二季度,随着企业云支出达到 790 亿美元的新高,三大云计算巨头微软、谷歌云和 AWS的全球云市场份额发生了变化。 根据新的市场数据,以下是 2024 年第二季度全球云市场份额结果和六大世界领先者,其中包括 AWS、阿里巴巴、…

条形码与二维码报表

概述 条形码与二维码:演示条形码与二维码,条形码数据将来自于关联的字段值。支持各种常用的条形码与二维码。 应用场景 如下图所示,简单展示数据 示例说明 数据准备 在数据面板中添加数据集,可选择Json数据集和API服务数据…

​全国大学分布SHP数据分享

数据是GIS的血液! 我们在《全国地铁路线及站点SHP数据》一文中,为你分享过全国地铁路线及站点数据。 现在再为你分享全国大学信息分布SHP数据,你可以在文末查看该数据的领取方法。 全国大学分布数据 据不完全统计至2024年6月20日&#xf…

护眼落地灯十大品牌排名:2024十大值得入手的护眼落地灯盘点

2024十大值得入手的护眼落地灯是哪款?随着生活水平的提高,许多家长在关心孩子身心健康的同时也关注着孩子的视力健康,很多家长了解到光线对孩子视力的影响,都纷纷给孩子准备护眼大路灯,但是面对市面上众多的护眼大路灯…

Java HotSpot虚拟机中的内存管理手册阅读笔记

显示与自动内存管理 内存管理是计算机编程中的一个重要概念,它涉及到跟踪和控制程序使用内存的方式。内存管理可以分为两种主要类型:显式内存管理和自动内存管理。 显式内存管理 在显式内存管理系统中,程序员必须手动分配和释放内存。这通…