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

(二)原型模式

        原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想

一、源型模式的定义

        原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。

📌 核心特点

  • 避免重复初始化操作(尤其是复杂对象)

  • 动态添加或删除产品类

  • 隐藏对象创建的细节

其UML类图如下所示:

类名作用
Client客户端,通过原型接口克隆对象
Prototype抽象原型接口,声明clone()方法
ConcretePrototypeA/B具体原型类,实现深拷贝逻辑

二、源型模式的适用场景

✅ 适用场景

  • 对象创建成本高(如数据库查询结果、复杂计算对象)

  • 需要动态配置的对象(如游戏中的敌人、武器生成)

  • 需要避免构造函数的约束(如深拷贝复杂对象)

❌ 不适用场景

  • 对象结构过于简单(直接new更高效)

  • 需要强类型控制的场景

2.1、基础实现

#include <iostream>
#include <memory>// 抽象原型类
class Prototype {
public:virtual ~Prototype() = default;virtual std::unique_ptr<Prototype> clone() const = 0; // 克隆方法virtual void print() const = 0;
};// 具体原型类A
class ConcretePrototypeA : public Prototype {
public:std::unique_ptr<Prototype> clone() const override {return std::make_unique<ConcretePrototypeA>(*this); // 调用拷贝构造}void print() const override {std::cout << "ConcretePrototypeA" << std::endl;}
};// 具体原型类B
class ConcretePrototypeB : public Prototype {
public:std::unique_ptr<Prototype> clone() const override {return std::make_unique<ConcretePrototypeB>(*this);}void print() const override {std::cout << "ConcretePrototypeB" << std::endl;}
};// 客户端代码
int main() {std::unique_ptr<Prototype> originalA = std::make_unique<ConcretePrototypeA>();std::unique_ptr<Prototype> cloneA = originalA->clone();cloneA->print(); // 输出: ConcretePrototypeAstd::unique_ptr<Prototype> originalB = std::make_unique<ConcretePrototy
http://www.dtcms.com/a/239335.html

相关文章:

  • python训练营打卡第48天
  • Python Web项目打包(Wheel)与服务器部署全流程
  • Pyppeteer企业级爬虫实战:从动态渲染到反反爬突破(2025终极指南)
  • 正常流程、可选流程和异常
  • 智能职业发展系统:AI驱动的职业规划平台技术解析
  • MySQL:CTE 通用表达式
  • 第二十八章 字符串与数字
  • 基于SpringBoot实现的大创管理系统设计与实现【源码+文档】
  • 人生中第一次开源:java版本的supervisor,支持web上管理进程,查看日志
  • 风力发电机领域的声纹监测产品
  • Java编程之桥接模式
  • LLMs 系列科普文(4)
  • CSP-38th
  • MCP笔记:介绍和原理
  • 高保真组件库:按钮
  • Docker 优势与缺点全面解析:容器技术的利与弊
  • Spring整合Mybatis
  • springboot2.x升级springboot3.x
  • 10万QPS高并发请求,如何防止重复下单
  • 从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
  • SeaweedFS S3 Spring Boot Starter
  • 监控脚本源码
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计概述
  • 算数运算符
  • 基于Vue3.0的在线工具网站
  • Day16
  • C盘的“下载”修改位置时出错了,怎么还原
  • three.js 零基础到入门
  • 软件更新机制的测试要点与稳定性提升
  • python中使用LibreHardwareMonitorLib.dll获取电脑硬件信息~~【不用同步打开exe文件】