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

《复制粘贴的奇迹:小明的原型工厂》

👨‍🎓 模式名称:原型模式(Prototype Pattern)

📖 背景故事

创业初期,小明每天加班写配送路线、配送策略、营销套餐。可当业务做大后,他发现大家常常下单“上次那个套餐”——

“老板,再来一个上次的奶茶+水果!”
“老样子,照搬昨天晚上的宵夜套餐!”

每天都要重新构建这些复杂的套餐组合,小明手速再快也累趴下了 🥵。

于是小明灵机一动:

“能不能把这些常见套餐复制粘贴,用一个模子刻出来?”💡

这时,原型模式救场了!

🌈 生活中类似的例子

  • 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!🙌”

http://www.xdnf.cn/news/12086.html

相关文章:

  • python打卡第44天
  • AI大模型学习三十二、飞桨AI studio 部署 免费Qwen3-235B与Qwen3-32B,并导入dify应用
  • CSS 选择器全解析:分组选择器/嵌套选择器,从基础到高级
  • 关于如何运用AI的思考
  • Day44 Python打卡训练营
  • ATM存取钱项目
  • 【DeepSeek 学大模型推理】Fused Residual LayerNorm with Reduce-Scatter
  • MySQL事务:从ACID特性到高并发优化的深度解析
  • day 44
  • K8S主机漏洞扫描时检测到kube-服务目标SSL证书已过期漏洞的一种永久性修复方法
  • 【论文写作】如何撰写基于模型拼接(A+B)的创新性论文
  • leetcode 二叉搜索树中第k小的元素 java
  • SiFli 567+emmc Standby休眠报错问题
  • 重装系统+驱动+磁盘分区
  • day19 leetcode-hot100-37(二叉树2)
  • 5.29-6.4解决问题归纳
  • 银行用户信誉等级
  • 前端面试宝典---vite原理解析
  • Numpy——结构化数组和Numpy文件
  • 【电赛培训课程】电子设计竞赛工程基础知识
  • 使用qt 定义全局钩子 捕获系统的键盘事件
  • 《人性的弱点》核心总结
  • AI基础认知
  • 【Python连接数据库基础 06】Pandas与SQL协同:解锁大规模数据处理新境界,让分析效率飙升10倍
  • 代理IP:6G标准化进程中的隐形推手
  • 如何在 React 中监听 div 的滚动事件
  • Pendulum:优雅处理 Python 中的日期与时间
  • vue3动态插入iframe,内容被取消的原因
  • pack 布局管理器
  • 第十三节:第三部分:集合框架:Map集合的遍历方式