Prototype模式去掉Clone方法

Prototype原型模式在游戏中的应用 笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,优快云社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。优快云视频网址:http://edu.youkuaiyun.com/lecturer/144 本篇博客给读者介绍一下关于Prototype原型设计模式在游戏中的应用,先举个例子,假设我们为游戏中的每一种怪物 阅读详情
Prototype模式去掉Clone方法
 
意图:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
 
结构图:

 
 
 
                                   

Prototype的主要缺陷是每一个Prototype的子类都必须实现Clone操作,这很烦。
一般都这样实现:
 
Prototype* ConcretePrototype::Clone()
{
     return new ConcretePrototype(*this);
}
 
现在想去掉这个重复的操作,
结构图如下:
 
实现如下:
 

class PrototypeWrapper
{
     public:
          ~PrototypeWrapper() {}

          virtual Prototype* clone() = 0;
};

 

template <typename T>
class PrototypeWrapperImpl : public PrototypeWrapper
{
     public:
          PrototypeWrapperImpl()
          {
               _prototype = new T();
          }

          virtual Prototype* clone()
          {
               return new T(*_prototype);
          }

     private: 
          T* _prototype;
};
 
使用:
 

PrototypeWrapper* prototype = new PrototypeWrapperImpl<ConcretePrototype>();

Prototype* p = prototype->clone();

 

基因家族快速鉴定指南:Windows平台下的HMMER实战解析 本文详细解析了在Windows平台下使用HMMER工具进行基因家族快速鉴定的完整实战流程。通过手把手指导,从软件获取、数据准备到模型构建与序列搜索,帮助生物信息学新手无需Linux环境,即可高效完成bZIP转录因子等家族的鉴定工作,大幅降低分析门槛。 阅读详情

相关推荐

Infiniband互连网络概述

一、Infiniband是什么? InfiniBand(简称IB)是一种工业标准规范,它定义了一种输入/输出架构,用于计算节点、通信基础设施设备、存储和嵌入式系统的互连。操作系统可以是Linux、Windows或ESXI。 IB网络一共是五层,从第一天起,IB就被设计为提供一个端到端的解决方案,改善和加速从物理层到上层的所有协议层。 IB协议于2000年由IBTA(InfiniBand Trade Association)提出,其规定了一...

weixin_41687819的博客 5229

如果clone下来的文件不想要了,直接在文件夹中删除就可以了吗?

直接在文件夹中删除文件并不会从Git仓库中删除它们,除非您执行了相应的Git命令来更新仓库状态。

m0_65085101的博客 3314

[漏洞剖析]JeecgBoot queryFieldBySql注入与JDBC连接滥用:从内存马植入到RCE的完整攻击链

本文深度剖析了JeecgBoot框架中queryFieldBySql接口的SQL注入漏洞及其引发的完整攻击链。攻击者利用该漏洞,通过Freemarker SSTI植入隐蔽的内存马,并进一步滥用JDBC连接测试功能,借助H2数据库特性实现远程命令执行(RCE),揭示了低代码平台中功能滥用与安全配置疏忽带来的严重风险。

weixin_29232121的博客 115

I2C多主机仲裁与时钟延展:从电气原理到驱动调试实战

在串行通信协议中,I2C以最少引脚实现多主机共享总线与速度自适应,其精妙源于开漏输出与线与逻辑。多主机仲裁(Arbitration)允许设备竞争总线时逐位让出控制权,时钟延展(Clock Stretching)则让慢速从机主动拉低SCL暂停主机,两者共同保障通信可靠性。对嵌入式开发者而言,理解仲裁失败时的规范动作、延展超时机制及硬件外设与GPIO模拟的差异,是解决总线挂死、数据错乱等疑难问题的关键。借助逻辑分析仪观察波形,结合EEPROM、PMIC等典型从机场景,工程师可系统掌握I2C驱动设计中的核心陷阱与

weixin_34220179的博客 416

ArcMap投影变换避坑指南:为什么你的坐标转换总出错?常见问题解析与解决方案

本文深入解析ArcMap中坐标转换与投影变换的核心区别与常见陷阱。针对坐标转换总出错的问题,从混淆“定义投影”与“投影变换”、栅格数据重采样选择、矢量数据地理变换参数设置等关键环节,提供清晰的避坑指南与实战解决方案,帮助用户确保空间数据的精确匹配。

weixin_29210727的博客 357

一文详解AUTOSAR COM ComSignal结构体

ComSignalLength指定信号的长度,以字节为单位,影响数据的解析范围和精度。比如车速信号若为UINT16类型,ComSignalLength=16。这里需要注意必须ComSignalLength与ComSignalType匹配(比如FLOAT32类型需配置ComSignalLength=32),超出实际物理值范围时需配置缩放(Scaling)参数。ComSignalType定义信号的物理数据类型,决定如何解析原始字节数据。

menghuyouyou的博客 943

js 通过prototype添加删除数组中指定的元素

js 删除数组中的元素 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) return i; } return -1; }; Array.protot...

weixin_42387991的博客 364

数字 IC 笔试面试必考点(1)FPGA 芯片架构

FPGA 芯片架构是非常重要的,如果你不了解 FPGA 芯片内部的详细架构,那么...

新芯设计的博客 2808

js对象中原型(prototype)的使用方法、替换以及注意事项

Title function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; } //----------------------原型的使用方法--

gyq04551的博客 2915

基于STM32、HAL库的W25Q01JVZEIQ TR FLASH存储器驱动应用程序设计

1Gb (128MB),分为512个可擦除块(block),每个块256KB。:块擦除约30-50ms,芯片擦除约30s。:标准SPI (支持1/2/4线模式)// 初始化CS引脚为高电平。// 擦除扇区(4KB)// 初始化Flash。/* 状态寄存器位 *//* 指令定义 *//* 超时定义 *//* 函数声明 */

corlin6688的博客 267

SAP中关于预测需求的重要载体:计划独立需求

预测,就是为了调节客户需求的波动、不平衡,使企业的生产计划、物料计划尽量平稳、有序的必备工具。计划独立需求,Planned Independent Requirement(PIR)是SAP系统中最常见的预测需求。

saplakes的博客 1879

Python调用CANoe COM接口实现车载诊断自动化

CANoe作为主流车载网络仿真与测试平台,其COM接口为Windows环境下实现高效自动化提供了原生支持。原理上,它基于Windows组件对象模型(COM),通过进程内代理机制实现低延迟、强实时的跨进程调用,无需额外授权模块。技术价值在于无缝复用CANoe全部能力(DBC解析、报文收发、诊断服务)的同时,接入Python生态——如Pandas数据处理、Pytest用例管理、Jenkins持续集成。典型应用场景包括ECU刷写验证、UDS/OBD诊断服务自动化、批量信号采集与分析。本文聚焦Python调用CAN

weixin_34293911的博客 346

YoloV8改进策略:轻量级的CloFormer助力Yolov8在速度和精度上实现双双提升

CloFormer是清华大学在今年发表的轻量级主干网络,引入了AttnConv,一种attention风格的卷积算子。所提出的AttnConv使用共享权重来聚合局部信息,并配置精心设计的上下文感知权重来增强局部特征。AttnConv和普通attention的结合使用池化来减少CloFormer中的FLOPs,使模型能够感知高频和低频信息。这篇文章主要向大家讲解如何将CloFormer加入到YoloV8中。论文链接:https://arxiv.org/abs/2303.17803v5。

m0_47867638的博客 4311

C++:Prototype模式去掉Clone方法

Prototype模式去掉Clone方法 意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 结构图: Prototype的主要缺陷是每一个Prototype的子类都必须实现Clone操作,这很烦。 一般都这样实现: Prototype* Con...

weixin_33936401的博客 96

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Factory模式与Prototype模式的异同

工厂模式实现的生产产品的功能,关键是利用了继承的特性。也就是说,你生成的产品,一定是由同一个抽象产品类派生出来的。所以,在工厂模式下,你如果要生成一类产品,就要引入一个抽像产品类,然后再由它派生出具体产品。同样,在原型模式中,你完全可以同样定义一个这样的“抽象产品--具体产品”层次,再利用具体...

chuanhuai7748的博客 143

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式精解之——Prototype模式

0 引言0.1 目的       本文档给出设计模式之——Prototype模式的简化诠释,并给出其C++实现。0.2 说明ProjectDesign Pattern Explanation(By K_Eckel)AuthorizationFree Distributed but Ownership Reser

dadalan的专栏 1119

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Prototype 模式

Prototype 模式提供了一个通过已存在对象进行新对象创建的接口(Clone) ,Clone()实现和具体的实现语言相关,在 C++中我们将通过拷贝构造函数实现之。 ////////////////Prototype.h/////// #ifndef _PROTOTYPE_H_ #define _PROTOTYPE_H_ class Prototype { public:

月轩的专栏 448

Prototype模式

Prototype模式Prototype模式(原型模式)是为了让对象自我复制的功能,即可以通过已有对象来创建新对象.Prototype提供了在一个现有对象创建新对象的接口Clone,它的实现和具体语言相关,在C++中通过拷贝构造函数实现.类的结构图如下所示: 实现如下: //Prototype.h//Prototyep#ifndef _PROTOTYPE_H_ #define _PROTOTYP

oyhy_的博客 362

C++ 设计模式 (五) Prototype模式

<br />   作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。<br />   Prototype模式并不是简简单单一个clone方法,Prototype模式的意义在于动态抽取当前对象运行时的状态,同时通过提供统一的clone接口方法,使得客户代码可以在不知道对象具体类型时仍然可以实现对象的拷贝,而无需运用type-switch检测对象的类型信息来分别调用创建方法来创建一个新的拷贝。<br />  Prototype模式结构图:<br />   <br />下面给出一个例子,并不涉

zhuxiufenghust的专栏 693

23种设计模式(六) —— 手写实现 Prototype 模式 (生成实例

Refer:《图解设计模式》2021年发表博文:一、通过复制生成的实例在 java 中,我们可以通过 new 关键字来生成实例。我们通常这样生成的实例都是要指定类名的。但是有时候,我们在开放的过程中,也有不指定类名来生成实例的需求。

2401_85112308的博客 1028

设计模式(Java)—Prototype模式

在Java中,我们可以使用new关键字指定类名来生成类的实例,像这样使用new来生成实例时,是必须指定类名的。但是,在开发过程中,有时候也会有”在不指定类名的前提下生成实例的需求”,例如,在以下情况下我们就不能根据类来生成实例,而是根据现有的实例来生成新的实例。 (1)对象种类繁多,无法将它们整合到一个类中时 (2)难以根据类生成实例时 生成实例的过程太过复杂,很难根据类来 生成实例...

zoinsung_lee的博客 1974

Prototype(原型)模式

Prototype模式不通过实例化类来创建一个新的未初始化的实例,而是通过复制一个现有的对象来生成新的对象。    1.作为工厂的原型:    假定Oozinoz公司的应用系统通过使用抽象工厂模式为不同的应用场合提供不同的图形用户界面。如下图列出了所用到的用户接口工厂: 三个抽象工厂(或称工具包)可以产生三种不同的“外观和感觉”的用户界面      Oozinoz公司的应用程序可以...

何新宇的技术博客 209

设计模式之Prototype Pattern

摘自:《设计模式精解—GoF 23种设计模式解析附C++实现源码》 URL: http://www.mscenter.edu.cn/blog/k_eckel Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C++中我们将通过拷贝构造函数实现之。 1 //Prototype.h 2 #ifndef _PROTO...

weixin_30410999的博客 119

23种设计模式(六) —— 手写实现 Prototype 模式 (生成实例)

clone() 方法定义在 java.lang.Object 中,因为 Object 类是所有 java 类的父类。因此所有类都默认继承了 Object 类。小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

2401_85767411的博客 628

设计模式之Prototype模式

Prototype模式

qq_26151007的博客 165
上一篇: 使用SED编辑器
下一篇: linux命令 - time
future_fighter
博客等级 码龄20年 129粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值