原型模式(C++)
定义
使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。
应用场景
- 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
- 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?
结构

代码示例
//Prototype.h
//对象深拷贝实现
/****************************************************/
#ifndef PROTOTYPE_H
#define PROTOTYPE_H
#include<iostream>
using namespace std;class prototype
{
public:prototype() { i = 10; j = 3.23; };prototype(const prototype &proto) { i = proto.i; j = proto.j; };~prototype() {};int get_i() { return i; };double get_j() { return j; };private:int i;double j;
};#endif
//test.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "Prototype.h"
int main()
{prototype a;cout << "i: " << a.get_i() << endl << "j: " << a.get_j() << endl;prototype b(a);cout << "i: " << b.get_i() << endl << "j: " << b.get_j() << endl;return 0;
}
运行结果

要定总结
- Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
- Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone。
- Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝。
相关文章:
原型模式(C++)
定义 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 应用场景 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的…...
web浏览器打开本地exe应用
一、如何使web浏览器打开本地exe应用? 浏览器打开本地exe程序我们可以使用ActiveXObject方法,但是只支持IE,谷歌、火狐等浏览器并不支持此操作。 那问题来了,我们又该如何操作? 经过本博主的不断学习探索终于找到了一…...
微信小程序如何配置并使用less?
1,检查微信开发者工具(工具版本1.03)————这步很重要不然后面按步骤实行后会发现急死你也还是不管用,我之前死在过这一步,所以大家不要再次踩坑了 ~ ~ 。。。 2,在VScode中下载Less插件 3,…...
【Spring】反射动态修改Bean实例的私有属性值
Cannot cast org.springframework.http.client.InterceptingClientHttpRequestFactory to org.springframework.http.client.OkHttp3ClientHttpRequestFactory 由于RestTemplate在自定义初始化时顺序比较早,想在启动后跟进yum或者注解配置修改初始化的值时ÿ…...
MySQL DDL 数据定义
文章目录 1.创建数据库2.删除数据库3.查看所有数据库4.查看当前数据库5.选择数据库6.创建数据表7.查看 MySQL 支持的存储引擎和默认的存储引擎8.删除数据表9.查看数据库的数据表10.查看表结构11.查看建表语句12.重命名数据表13.增加、删除和修改字段自增长14.增加、删除和修改数…...
Ventoy 设置VTOY_MAX_SEARCH_LEVEL = 0只扫描U盘根目录 不扫码子目录
在镜像分区/media/yeqiang/Ventoy创建目录ventory,目录内创建文件ventoy.json,内容如下 {"control":[{ "VTOY_MAX_SEARCH_LEVEL": "0" }] }采用系统默认的utf-8编码。 参考: search path . Ventoy Plugin.e…...
vue3父子同信的双向数据实现
前言: 我们知道的是,父传子的通信,和子传父的通信,那如何实现父子相互通信的呢? (vue3中)v-model 和modelValue结合使用,在vue2中使用的是.sync 在父组件的写法 <template> <Son v-model"num" /&…...
Shiro是什么?为什么要用Shiro?
前言 本文小新为大家带来 Shiro入门概述 相关知识,具体内容包括Shiro是什么,为什么要用 Shiro,Shiro与Spring Security 的对比,Shiro的基本功能(包括:基本功能框架,功能简介)&#x…...
Vue3+Vite+Pinia+Naive后台管理系统搭建之九:layout 动态路由布局
前言 如果对 vue3 的语法不熟悉的,可以移步Vue3.0 基础入门,快速入门。 1. 系统页面结构 由 menu,面包屑,用户信息,页面标签,页面内容构建 2. 创建页面 创建 src/pages/layout.vue 布局页 创建 sr…...
从零开始学Python(Ⅰ)基本变量与数据类型
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Python的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.关于Python的基本知识(变量…...
SQL ASNI where from group order 顺序 where和having,SQL底层执行原理
SQL语句执行顺序: from–>where–>group by -->having — >select --> order 第一步:from语句,选择要操作的表。 第二步:where语句,在from后的表中设置筛选条件,筛选出符合条件的记录。 …...
Mac M2 Ventura(13.3) 新机 安装Cocoapods
1.执行命令: sudo gem install cocoapods 因为是新机,内置的ruby版本是(2.6.0)太低,会报错 所以需要安装新的ruby版本 2.如果已经安装了低版本的homebrew,可以先卸载: 卸载: /b…...
Unity 引擎做残影效果——2、屏幕后处理方式
Unity实现残影效果 大家好,我是阿赵。 这里继续介绍Unity里面做残影的方法。之前介绍了BakeMesh的方法做残影,这一期介绍的是用屏幕后处理的方法做残影。 一、原理 之前的BakeMesh方法,是真的生成了很多个网格模型在场景里面。如果用后处理做…...
考研算法38天:反序输出 【字符串的翻转】
题目 题目收获 很简单的一道题,但是还是有收获的,我发现我连scanf的字符串输入都忘记咋用了。。。。。我一开始写的 #include <iostream> #include <cstring> using namespace std;void deserve(string &str){int n str.size();int…...
“深入解析JVM:探秘Java虚拟机的工作原理“
标题:深入解析JVM:探秘Java虚拟机的工作原理 摘要:本文将深入探讨Java虚拟机(JVM)的工作原理,包括类加载、内存管理、垃圾回收、即时编译等关键概念。通过详细解析JVM的各个组成部分,读者将能够…...
[Flask]SSTI1
根据题目提示,这关应该是基于Python flask的模版注入,进入靶场环境后就是一段字符串,而且没有任何提示,有点难受,主要是没有提示注入点 随机尝试一下咯,首先尝试一下guest,GET传参 但是没有反应…...
Object Map 的相互转换
学生业务对象定义:Student Student student new Student(); student.setId(1L); student.setName("令狐冲") student.setAge(10) 第一种:通过Alibaba Fastjson实现 pom.xml 文件依赖 <dependency><groupId>com.alibaba</g…...
VS+Qt环境下解决中文乱码问题
目录 原因解决方案总结 原因 使用VSQt出现中文乱码的情况一般都是给控件添加中文文本时出现,而控件需要的字符串类型是QString,默认是utf-8。在 Visual Studio 中,源代码文件的默认执行字符集可能是 Windows 默认的 ANSI 字符集,…...
互联网摸鱼日报(2023-08-08)
互联网摸鱼日报(2023-08-08) 36氪新闻 宝洁、欧莱雅、联合利华加大广告预算投入:越萧条,要越营销? 把智能手机的“高端货”装进汽车,厂商的脑洞越来越大了 王一博《热烈》票房破7亿,街舞是一门怎样的生意࿱…...
NTT DATA利用相干伊辛机模拟基因组组装和疾病治疗的潜力
(图片来源:网络) 7月20日,日本领先的IT服务提供商和行业咨询公司NTT DATA宣布完成了一个使用量子计算优化基因组组装过程的项目。这是量子计算应用于医疗保健和生命科学行业中的一个里程碑。 本项目通过比较量子和非量子计算方…...
Qwen3.5-2B效果展示:儿童绘本图→识别角色/场景/情绪→生成故事续写+朗读脚本
Qwen3.5-2B效果展示:儿童绘本图→识别角色/场景/情绪→生成故事续写朗读脚本 1. 模型介绍 Qwen3.5-2B是通义千问团队推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型特别适合在资源有限的设备上部…...
4个核心功能实现智能散热:FanControl个性化温控指南
4个核心功能实现智能散热:FanControl个性化温控指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...
Nacos服务实例权重设置详解:如何根据服务器性能动态调整流量分配
Nacos服务实例权重设置详解:如何根据服务器性能动态调整流量分配 在分布式系统架构中,服务实例的性能差异是不可避免的现实问题。新采购的服务器与运行多年的老旧设备并存,不同配置的云主机混合部署,这些场景都要求我们能够智能地…...
AI 开发实战:实验和试点项目怎么记录,才不会做完就散
AI 开发实战:实验和试点项目怎么记录,才不会做完就散 一、这个问题为什么值得专门拿出来做? 在 AI 工程落地里,真正拖慢团队的往往不是模型本身,而是流程和协作方式没有跟上。 围绕“实验和试点项目怎么记录࿰…...
2026硬核对比:Claude 4.6官网双版本解析与Gemini 3.1 Pro镜像如何选
对于追求极致编码质量与深度推理的开发者与技术决策者,2026年Anthropic推出的Claude 4.6系列(含旗舰Opus与高性价比Sonnet)在智能体(Agent)能力与长上下文处理上树立了新标杆。 若想在国内网络环境下零成本深度对比其…...
快速验证openclaw:用快马AI一键生成安装脚本与抓取原型
最近在做一个机器人抓取相关的项目,偶然发现了openclaw这个开源工具。作为一个Python实现的轻量级抓取框架,它很适合快速搭建原型。不过在实际使用过程中,我发现它的安装和配置过程有点繁琐,特别是对新手不太友好。于是尝试用InsC…...
Multisim课程设计救星:从卡诺图到仿真,手把手搞定五人表决器(附源文件)
五人表决器数字电路设计实战:从卡诺图到Multisim仿真的全流程解析 第一次拿到数字电路课程设计任务书时,看着"五人表决器"这个题目,我的大脑和实验室的示波器一样一片空白。直到在面包板上成功点亮第一个LED指示灯,才真…...
如何高效下载B站视频:downkyi带来的一站式解决方案
如何高效下载B站视频:downkyi带来的一站式解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等ÿ…...
OpCore-Simplify:3步搞定黑苹果EFI配置,告别繁琐手动调试
OpCore-Simplify:3步搞定黑苹果EFI配置,告别繁琐手动调试 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经被黑苹果复…...
革新性B站体验全流程优化:Bilibili-Evolved让卡顿成为历史
革新性B站体验全流程优化:Bilibili-Evolved让卡顿成为历史 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved 你是否也曾遭遇这样的窘境:精心挑选的番剧在高潮时刻突然卡…...
