C++ 设计模式(5. 原型模式)

  • 原型模式一种创建型设计模式,该模式的核心思想是基于现有的对象创建新的对象,而不是从头开始创建。

  • 原型模式的基本结构

    • 实现原型模式需要给原型对象声明一个克隆方法,执行该方法会创建一个当前类的新对象,并将原始对象中的成员变量复制到新生成的对象中,而不必实例化。并且在这个过程中只需要调用原型对象的克隆方法,而无需知道原型对象的具体类型。
    • 原型模式包含两个重点模块:

      • 抽象原型接口prototype: 声明一个克隆自身的方法clone
      • 具体原型类ConcretePrototype: 实现clone方法,复制当前对象并返回一个新对象。
  • 原型模式的基本实现
    原型模式的实现过程即上面描述模块的实现过程:

    • 创建一个抽象类或接口,声明一个克隆方法clone
    • 实现具体原型类,重写克隆方法
    • 客户端中实例化具体原型类的对象,并调用其克隆方法来创建新的对象。
  • 什么时候实现原型模式

    • 相比于直接实例化对象,通过原型模式复制对象可以减少资源消耗,提高性能,尤其在对象的创建过程复杂或对象的创建代价较大的情况下。当需要频繁创建相似对象、并且可以通过克隆避免重复初始化工作的场景时可以考虑使用原型模式,在克隆对象的时候还可以动态地添加或删除原型对象的属性,创造出相似但不完全相同的对象,提高了灵活性。
    • 但是使用原型模式也需要考虑到如果对象的内部状态包含了引用类型的成员变量,那么实现深拷贝就会变得较为复杂,需要考虑引用类型对象的克隆问题。
    • 原型模式在现有的很多语言中都有应用,比如以下几个经典例子。

      • Java 提供了 Object 类的 clone() 方法,可以实现对象的浅拷贝。类需要实现 Cloneable 接口并重写 clone() 方法。
      • 在 .NET 中,ICloneable 接口提供了 Clone 方法,可以用于实现对象的克隆。
      • Spring 框架中的 Bean 的作用域之一是原型作用域(Prototype Scope),在这个作用域下,Spring 框架会为每次请求创建一个新的 Bean 实例,类似于原型模式。
相关推荐
讳疾忌医丶21 分钟前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
2401_8685347843 分钟前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
软件课代表CiCi1 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
蒸蒸yyyyzwd2 小时前
从面经中学到的三件事
c++·笔记
时时三省2 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
ThornArmor5 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
Elsa️7467 小时前
算法一周刷题总结
c++·算法
风合星语7 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!7 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
welfare9627 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++