设计模式 -- 原型模式

news2024/11/25 16:39:34

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是原型模式?

        原型模式是一种创建型设计模式,它允许我们通过复制现有对象来创建新对象,而不是通过实例化新对象并手动设置其属性。这种方式可以提高创建对象的效率,特别是当对象的创建成本很高时。

        在原型模式中,我们创建一个原型对象,并使用它来创建其他对象。原型对象包含要复制的属性和方法。当我们需要创建新对象时,我们只需复制原型对象并进行必要的更改即可。

二、原型模式的优缺点:

优点:

  1. 提高性能:由于原型模式是通过克隆已有对象来创建新对象,避免了重复创建对象的开销,提高了性能。

  2. 简化对象创建过程:原型模式可以通过复制现有的对象来创建新对象,避免了手动创建对象的复杂过程,简化了对象创建过程。

  3. 可以动态添加或删除对象:原型模式可以动态添加或删除已有的原型对象,从而实现动态的对象创建。

  4. 可以实现深克隆:原型模式可以实现深克隆,即复制对象及其所有子对象的状态,从而避免了浅克隆可能带来的问题

缺点:

  1. 原型对象必须要能够被复制。如果对象不支持复制,那么就无法使用原型模式。

  2. 对象的复制可能会非常耗费资源,特别是当要复制的对象非常大时。

  3. 原型模式会破坏对象的封装性,因为对象的复制需要访问对象的内部状态。

  4. 原型模式的实现可能会增加代码复杂度,因为存在循环嵌套的情况

三、原型模式的结构:

        

 

四、原型模式实战:

以上图为例,实战原型模式

1.创建原型对象

 2.测试原型模式:

3.结果:

 

五.总结:

原型模式的应用场景:

  1. 在创建对象的过程中,如果需要创建多个具有相同属性的对象,可以使用原型模式,避免重复创建对象,提高性能。

  2. 在需要创建的对象的类中,如果存在比较复杂的构造函数或初始化操作,可以使用原型模式,避免重复编写这些代码。

  3. 在需要动态生成对象的场景中,原型模式可以根据需要动态生成对象,而不需要预先定义好所有可能需要的对象。

  4. 在需要保护对象的场景中,原型模式可以通过复制对象来创建新的对象,而不会影响原有对象的状态和属性。

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

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

相关文章

【问题解决】RabbitMQ启动出现epmd error for host xx.xx: nxdomain (non-existing domain)

问题描述 【k8s】或【普通容器】或【Linux】部署的RabbitMQ启动时出现了 epmd error for host xx.xx: nxdomain (non-existing domain) 错误,MQ无法启动成功。 其中 xx.xx 为无法解析的域名。 RabbitMQ官方还提到报错 Error during startup: {error,no_epmd_port}…

回归区间预测 | Matlab基于分位数随机森林算法(QRF)的回归预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 Matlab基于分位数随机森林算法(QRF)的回归预测,matlab代码。 基于分位数随机森林算法(QRF)回归预测,matiab代码,单变量输入模型。 评价指标包括:R2、MAE、MSE、RMSE和区间覆盖率和区间平均宽度百分比等,代码质…

【软件测试】自动化测试日志问题该怎么解决?测试老鸟总结方案...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

Leetcode力扣秋招刷题路-0801

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 nums1 和 nums2 。在一次操作中,我们可以交换 nums1[i] 和 nums2[i]的元素。 例如,如果 …

为什么越来越多的人开始学习大数据了?

现在,在数字化转型的推动下,越来越多的企业意识到大数据的魅力,并不断在这个领域投入资金,Python大数据开发相关人才也备受青睐! 大数据从业领域很宽广,不管是科技领域还是食品产业,零售业等都…

大数据行业就业前景怎么样呢

就目前的前景来看,大数据的发展的确的非常不错的~ 既然回答大数据的问题,那就让我们到用数据的方式来回答一下。大数据需求越来越多,只有技术在手不愁找不到工作。 先来看几个招聘网站的报告数据:Boss直聘发布的,今年…

Zynq-7000、FMQL45T900的GPIO控制(七)---linux驱动层配置GPIO中断输入

本文使用的驱动代码 (1条消息) FMQL45T900linux驱动外部中断输入ZYNQ-7000linux驱动外部中断输入资源-CSDN文库 在Zynq-7000、FMQL45T900驱动层也时常会用到对GPIO的控制,这里就针对实际使用的情况进行说明,首先根据之前的帖子确实使用GPIO编号 这里采…

从不均匀性角度浅析AB实验 | 京东云技术团队

作者:京东零售 路卫强 本篇的目的是从三个不均匀性的角度,对AB实验进行一个认知的普及,最终着重讲述AB实验的一个普遍的问题,即实验准确度问题。 一、AB实验场景 在首页中,我们是用红色基调还是绿色基调,是采用门店小列表外商品…

C++ 探索程序 详细解读程序在运行过程中都发生了什么

目录 头文件-源代码 头文件重复包含 问题 解决方案 程序生成过程 预处理Preprocessi 编译Compilation 汇编Assembly 链接Linking 编译期-运行期 编译期确定 运行期确定 编译期错误 运行期错误 类和对象 宏 宏的其他用法 头文件-源代码 头文件(.h&am…

Baklib分享:关于FAQ页面的一些制作技巧

FAQ页面(Frequently Asked Questions)是企业网站中常见的一种页面,主要用于解答客户常见的问题。一个优秀的FAQ页面不仅能够提高客户的满意度,还能够减轻客服部门的工作量。下面将介绍一些制作FAQ页面的技巧,并推荐使用…

Mysql使用函数后不走索引怎么优化?

网上很多人说mysql一旦使用函数就不走函数,但是事实真的是如此吗?我先说明,并不是如此的,本篇文章会通过DAYOFWEEK()和substr()两个函数作为条件查询,看看究竟是否会走索引(其他函数同理)&#…

15.基于主从博弈的智能小区代理商定价策略及电动汽车充电管理

说明书 MATLAB代码:基于主从博弈的智能小区代理商定价策略及电动汽车充电管理 关键词:电动汽车 主从博弈 动态定价 智能小区 充放电优化 参考文档:《基于主从博弈的智能小区代理商定价策略及电动汽车充电管理》基本复现 仿真平台&#…

【ChatGPT】如何修复access denied you do not have access to chat.openai.com

文章目录 一、前言二、是什么导致 ChatGPT 访问被拒绝错误?三、如何修复 OpenAI 上的访问被拒绝?3.1 清除 Cookies 和缓存3.2 检查账户登录凭证3.3 允许请求的权限3.4 从其他浏览器登录OpenAI3.5 联系 OpenAI 客户支持 四、ChatGPT 支持的国家和地区 一、…

delphi使用Edge Browser浏览器组件

RAD Studio 10.4在VCL Web浏览器上具有一项新功能。它是Edge Browser,它具有新功能,并且比以前的Web浏览器更具兼容性。 这是在C Builder和Delphi中使用Edge浏览器的快速帮助。 在Windows上安装“ Edge ”版本从RAD Studio的GetIt菜单下载“ Edge SDK…

JMeter的使用(二)

九、直连数据库 通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。 获取某条学院的名字,放在百度搜索: JMeter 不具备直连数据库功能,必须整合第三方(jar包)实现配置数据库的连接通过JDBC Re…

token 登录流程

客户端用账号密码请求登录服务端收到请求,验证账号密码验证成功后,服务端签发token,发送给客户端客户端收到token,保存下来客户端每次向服务器发送请求资源,都携带token服务器验证token验证成功,返回资源

LINUX文件管理与编辑命令2

文章目录 一、LINUX文件管理与编辑命令总结 一、LINUX文件管理与编辑命令 Linux wc命令:统计字节数、字数、行数 Linux echo命令:输出字符串或提取Shell变量的值 Linux chmod命令:权限管理 Linux chown命令:修改文件或目录的所有者或所属组 Linux whereis命令:查找文件 Linux …

揭秘长尾关键词的力量:如何在搜索引擎上挤掉竞争对手?

现在,你已经掌握了SEO 的流程,知晓了网站优化的各种方法,也清楚了站外优化的技巧,但问题又来了:你知道优化网站,竞争对手也知道;你懂得站外优化,竞争对手也懂。在这种情况下&#xf…

AI工具究竟是帮手还是对手?

本文概要 近日育碧开发了人工智能工具 Ghostwriter,可以一键生成游戏NPC对话。不少游戏开发者担心AI写手工具的出现会让自己“饭碗”不保,但Swanson表示这个工具只是为了提供第一稿的 barks来减少对话生成工作的繁琐度。AI工具究竟是帮手还是对手&#x…

C++笔试笔记1(4399 西山居 深信服 剑心互娱 快手)

写在前头,这里面只是我在做这些公司笔试时抄下来的一部分题,并不全,但我会尽量把我所抄的每道题的知识点都贴上 1. Linux下支持的IO多路复用,有selec、poll和epoll,但Windows下仅支持select。 2. 新版C,智…