《复制粘贴的奇迹:原型模式》
📖 背景故事
创业初期,小明每天加班写配送路线、配送策略、营销套餐。可当业务做大后,他发现大家常常下单“上次那个套餐”——
“老板,再来一个上次的奶茶+水果!”
“老样子,照搬昨天晚上的宵夜套餐!”
每天都要重新构建这些复杂的套餐组合,小明手速再快也累趴下了 🥵。
于是小明灵机一动:
“能不能把这些常见套餐复制粘贴,用一个模子刻出来?”💡
这时,原型模式救场了!
🌈 生活中类似的例子
-
Word 文档点“复制” → “粘贴”
-
游戏角色自定义后,保存为模板,创建新角色时快速复制
-
套餐模板、一键下单
😵 如果不用原型模式
每次都用建造者一步一步构建套餐?效率太低了!
用工厂创建?每次还要重新传配置?麻烦!
💡 小明的解决方案:原型模式登场!
小明定义了所有套餐都必须支持“克隆”,然后把常见的“模板套餐”先存下来,当用户要下单时,直接拷贝一份,改一点点就行了!
✅ 原型模式结构
-
原型接口:定义 clone 方法
-
具体原型类:实现 clone 自我复制
-
客户端:调用 clone 得到新的对象
🧠 原型模式 C++ 示例
抽象原型类
class ComboPrototype {
public:virtual ComboPrototype* clone() = 0;virtual void show() = 0;virtual ~ComboPrototype() {}
};
具体原型类:奶茶 + 水果 套餐
class MilkTeaFruitCombo : public ComboPrototype {
public:std::string name;MilkTeaFruitCombo() {name = "经典奶茶水果套餐 🍹🍉";}ComboPrototype* clone() override {return new MilkTeaFruitCombo(*this);}void show() override {std::cout << name << std::endl;}
};
具体原型类:烧烤+可乐 宵夜套餐
class BBQNightCombo : public ComboPrototype {
public:std::string name;BBQNightCombo() {name = "深夜烧烤可乐套餐 🍖🥤";}ComboPrototype* clone() override {return new BBQNightCombo(*this);}void show() override {std::cout << name << std::endl;}
};
客户端代码
int main() {// 小明的模板库ComboPrototype* prototype1 = new MilkTeaFruitCombo();ComboPrototype* prototype2 = new BBQNightCombo();// 用户:我要“老样子”套餐!ComboPrototype* order1 = prototype1->clone();ComboPrototype* order2 = prototype2->clone();// 展示结果std::cout << "下单成功!您的套餐是:" << std::endl;order1->show();order2->show();// 清理delete prototype1;delete prototype2;delete order1;delete order2;return 0;
}
🤯 不使用原型模式怎么办?
// 每次都得重新 new + 配置属性
class Combo {
public:std::string name;Combo(const std::string& n) : name(n) {}void show() { std::cout << name << std::endl; }
};int main() {Combo* combo1 = new Combo("经典奶茶水果套餐 🍹🍉");Combo* combo2 = new Combo("深夜烧烤可乐套餐 🍖🥤");combo1->show();combo2->show();delete combo1;delete combo2;
}
缺点:
- 重复构造逻辑
- 如果对象构造复杂,效率低
- 不便于复制已有对象的全部状态
💬 小明的总结(带表情包)
“每次重复创建套餐,累得像🐂!现在我直接复制模板,一键下单,效率飙升⚡!原型模式,YYDS!🙌”
相关文章:
《复制粘贴的奇迹:原型模式》
📖 背景故事 创业初期,小明每天加班写配送路线、配送策略、营销套餐。可当业务做大后,他发现大家常常下单“上次那个套餐”—— “老板,再来一个上次的奶茶水果!” “老样子,照搬昨天晚上的宵夜套餐&#…...

IEC 61347-1:2015 灯控制装置安全标准详解
IEC 61347-1:2015灯控制装置安全标准详解 IEC 61347-1:2015 是国际电工委员会(IEC)发布的灯控制装置第1部分:通用要求和安全要求的核心标准,为各类照明用电子控制设备设定了全球通用的安全基准。该标准适用于独立式或内置于灯具/…...

Ansys Zemax | 手机镜头设计 - 第 4 部分:用 LS-DYNA 进行冲击性能分析
附件下载 联系工作人员获取附件 该系列文章将讨论智能手机镜头模组设计的挑战,从概念和设计到制造和结构变形分析。本文是四部分系列中的第四部分,它涵盖了相机镜头的显式动态模拟,以及对光学性能的影响。使用 Ansys Mechanical 和 LS - DY…...
[蓝桥杯]实现选择排序
实现选择排序 题目描述 实现选择排序算法。介绍如下: 选择排序的工作原理是每一次从需要排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。 请编写代码,完成选择排序,…...

[蓝桥杯]卡片换位
卡片换位 题目描述 你玩过华容道的游戏吗? 这是个类似的,但更简单的游戏。 看下面 3 x 2 的格子 --------- | A | * | * | --------- | B | | * | --------- 在其中放 5 张牌,其中 A 代表关羽,B 代表张飞,* …...

【论文笔记】High-Resolution Representations for Labeling Pixels and Regions
【题目】:High-Resolution Representations for Labeling Pixels and Regions 【引用格式】:Sun K, Zhao Y, Jiang B, et al. High-resolution representations for labeling pixels and regions[J]. arXiv preprint arXiv:1904.04514, 2019. 【网址】…...

【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
题目:P9422 [蓝桥杯 2023 国 B] 合并数列 题目描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 { a 1 , a 2 , ⋯ a n } \{a_1, a_2, \cdots a_n\} {a1,a2,⋯an} 和 { b 1 , …...
在MATLAB中,`mean(P_train, 2)` 的含义
在MATLAB中,mean(P_train, 2) 的含义是: 计算矩阵 P_train 中每一行的平均值(沿第2个维度操作)。 详解: mean(A, dim) 函数: 对数组 A 沿维度 dim 求平均值。dim1 → 按列计算(返回行向量&…...
开源模型应用落地-OpenAI Agents SDK-集成Qwen3-8B(一)
一、前言 在人工智能技术迅猛发展的今天,OpenAI Agents SDK 为开发者提供了一个强大的工具集,用于构建基于 Python 的智能代理应用。这些代理可以执行从简单任务到复杂决策的一系列操作,极大地提升了应用程序的智能化水平。 通过 OpenAI Agents SDK,可以利用 Python 编程语…...

109页PPT华为流程模块L1-L4级梳理及研发采购服务资产5级建模
华为的流程体系是其核心竞争力之一,也是其从一家小型民营企业成长为全球领先科技巨头的重要支撑。这套体系的核心思想是以客户为中心、以价值创造为导向、以流程驱动业务、持续优化改进。 下载资料请查看文章中图片右下角信息 以下是华为流程体系的关键组成部分和特…...

第N1周:one-hot编码案例
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 一、one-hot编码概念 自然语言处理(NLP)中的文本数字化:文字对于计算机来说就仅仅只是一个个符号,计算…...

Windows安装docker desktop
Windows 版本: Windows 10/11(64位)专业版、企业版或教育版(家庭版需手动配置)。 版本号需 ≥ 1909(建议更新到最新系统) 打开程序 启动服务后点点点 重启生效(没有的话 安装WSL…...

Ros(俩不同包的节点 交流 topic message)
不同的俩节点 如chao_node 和ma_node .在俩不同的包下。 他们若想互相产生联系, 就需要靠这个关系了。 想象一下是开黑的场景 其实群名就是topic 而发送的消息就是Message。 其中主动刷屏的message的一方 就是 Publisher 而接受的那一方 就是subsciber...

李沐《动手学深度学习》 | 数值稳定性
文章目录 数值稳定性梯度消失Sigmoid作为激活函数 梯度爆炸 让训练更加稳定合理的权重初始化Xavier初始化(常用)He初始化/Kaiming方法 Batch Normalization Q&A 数值稳定性 当神经网络的深度比较深时,非常容易数值不稳定。 不稳定梯度是…...

OpenCV CUDA模块图像处理------图像连通域标记接口函数connectedComponents()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数在 GPU 上执行二值图像的连通域标记操作,即将图像中所有相连的前景像素区域赋予相同的标签(label)&…...

Android Studio 打包时遇到了签名报错问题:Invalid keystore format
错误指出密钥库的格式无效,可能是由于密钥库本身的问题导致的,还有一种可能是由于jdk版本导致。我试过重新签名,也是不行,后来发现是JDK版本问题,我的Studio之前是jbr11,好像后来合并代码重新下载编译了项目…...

内存管理【Linux操作系统】
文章目录 简单谈一下物理内存管理页框为什么要把物理内存划分成一个一个固定大小的页框使用?对页框进行描述对页框进行组织管理虚拟地址→物理地址(真实的页表)真实的页表那我们如何把虚拟地址→物理地址呢?页表懒加载时ÿ…...

Go语言学习-->从零开始搭建环境
Go语言学习–>从零开始搭建环境 1 开发环境 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ windos 平台下载: 我这里下载1.22稳定版 双击下载好的.msi文件 修改安装…...

【力扣】3403. 从盒子中找出字典序最大的字符串 I
解法一: class Solution {public String answerString(String word, int numFriends) {//对字符的划分,word长度为n,共有n1个位置可以插入,但是要求被分为非空字符串,所以插入的位置最多为n-1。int n word.length();…...
苹果企业签名撤销
苹果企业签名证书被撤销的原因通常涉及违反苹果的**《Apple Developer Program企业协议》**或相关安全政策,以下是常见原因: ### 一、核心违规原因 1. **证书滥用分发公开应用** * 企业证书仅限**内部员工使用**,若用于以下场景会被撤销&…...
12306高并发计算架构揭秘:Apache Geode 客户端接入与实践
目录 Apache Geode 客户端入门指南 一、安装 Apache Geode 二、启动 Geode 集群 三、Java 客户端接入 Geode Maven 示例依赖 Gradle 示例依赖 Java 示例代码 四、Spring Boot 客户端接入 Geode Maven 配置 Gradle 配置 运行应用 五、Apache Geode 原生客户端 .NET…...
JSON to Excel 3.0.0 版本发布 - 从Excel插件到Web应用的转变
1. 简介 JSON to Excel 3.0.0 是一个重大更新版本,将原有的Excel插件扩展为完整的Web应用。现在您可以直接在浏览器中使用它,无需安装任何插件。所有的转换在浏览器中完成,预览后,可点击下载按钮,导出成xlsx格式文件。…...

【前端】Vue3+elementui+ts,给标签设置样式属性style时,提示type check failed for prop,再次请出DeepSeek来解答
🌹欢迎来到《小5讲堂》🌹 🌹这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&…...
Neo4j 监控全解析:原理、技术、技巧与最佳实践
高效的监控是保障 Neo4j 图数据库性能、稳定性和可观察性的基石。本文将深入探讨 Neo4j 监控的核心原理、关键技术、实用技巧及行业最佳实践,助您构建强大的数据库运维体系。 掌握这些监控技术,将使您的 Neo4j 数据库在稳定性、性能和可维护性上达到企业…...

PyTorch——优化器(9)
优化器根据梯度调整参数,以达到降低误差 import torch.optim import torchvision from torch import nn from torch.nn import Sequential, Conv2d, MaxPool2d, Flatten, Linear from torch.utils.data import DataLoader# 加载CIFAR10测试数据集,设置tr…...

07 APP 自动化- appium+pytest+allure框架封装
文章目录 一、PO二、代码简单实现项目框架预览:base_page.pydir_config.pyget_data.pylogger.pystart_session.pyconfig.yamlkey_code.yamllaunch_page_loc.pylogin_page_loc.pylaunch_page.pylogin_page.pytest_login.pypytest.inirun.py 一、PO PO 分为四层 &…...
Postgresql常规SQL语句操作
目录 一、数据库与对象管理 二、数据操作 (CRUD) 三、查询优化与执行计划分析 四、事务控制 五、数据类型与高级特性应用 六、系统查询与维护 研发中的重要注意事项 在 PostgreSQL 研发中,以下这些 SQL 应用是极其常见且核心的操作,涵盖了数据库设…...
智能合约安全漏洞解析:从 Reentrancy 到 Integer Overflow
目录 🌀 Reentrancy(重入攻击) 原理解析 典型案例:The DAO 攻击事件 漏洞示例 防范措施 🔢 Integer Overflow(整数溢出) 原理解析 漏洞示例 防范措施 🛡️ 总结与建议 随着…...

英国2025年战略防御评估报告:网络与电磁域成现代战争核心
英国 2025 年战略防御评估 (SDR) 详细制定了一项计划,通过加强使用网络、人工智能和数字战争来整合其军事防御和进攻能力。 与美国一样,英国也被认为(尽管未被公开证实)会开展进攻性网络行动,甚至针对盟友。斯诺登泄露…...

基于QPSK调制解调+Polar编译码(SCL译码)的matlab性能仿真,并对比BPSK
目录 1.引言 2.算法仿真效果演示 3.数据集格式或算法参数简介 4.MATLAB核心程序 5.算法涉及理论知识概要 6.参考文献 7.完整算法代码文件获得 1.引言 Polar码由土耳其教授Erdal Arikan于2008年提出,是第一种被严格证明可以达到香农极限的构造性编码方法。其核…...