Prototype设计模式的实现

c++实现设计模式——Prototype模式 c++实现设计模式——Prototype模式 什么是Prototype模式 Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone),Clone()实现和具体的语言相关,在C++中通过拷贝构造函数实现。 结构图 为什么用Prototype模式 什么是Prototype模式,我相信网上有一堆的解释,但是我们要理解为什么要用,用了有什么好处,这才是最重要的,先说结论,什么场景下要用: 要创建很多个对象 每个对象属性很类似,只有少量区别,如果一个是鸡一个是. 阅读详情

Prototype设计模式的实现

Implementing the Prototype design Pattern

 

      下载本文代码

当我建立一个类的实例很复杂时,我们可以使用Prototype模式。与其建立很多类的实例,还不如进行适当的修改后,使用最初的实例的副本。使用Prototype模式,可以通过克隆一个原型,减少子类的数量。Prototype模式可以减少类的实例的数量。

      在这个模式中,通过克隆来创建对象。我们有时创建很多的子类,除了通过很多的子类来创建不同的对象,我们还可以只需要唯一的一个子类,这个子类保持对每个对象基类的引用,并通过这个子类创建对象。通过向子类的构造函数传递参数并克隆对象。每个对象都实现clone方法,所以可以被克隆。我们可以使用Prototype模式,通过克隆原型来减少子类的数量。

       克隆可以通过实现Icloneable接口来实现。Icloneable接口中唯一的方法是Clone,并返回一个新的类的实例。

ICloneable.Clone method signature
[VisualBasic] Function Clone() As Object
[C#]
object Clone();


我们必须了解Clone()方法只是一种浅表复制(Shallow copy),而不是深层复制(Deep copy)。所以它只是返回一个引用,而不象深层复制(Deep copy)那样创建一个复制的实例。我们可以通过使用Iserializable接口来实现深层复制(Deep copy)。

另一个缺点就是原型的每个子类必须实现Clone()方法,有时候,增加clone方法是很困难的。

在这个例子中,我建立了EmpData类,并且实现了Icloneable接口和Iserializable接口。Icloneable接口需要实现Clone方法,使得类可以被复制。Iserializable接口为了实现对EmpData类的深层复制(Deep copy)。使用的方法为:将EmpData对象序列化为一个文件,也可以将这个文件反序列化为一个EmpData对象。

EmpData类包含两个方法:GetEmpData和ChangeEmpData。这两个方法被用来以一个字符串(string)的形式获取EmpData对象、更改EmpData类。每个方法都可以被调用,来检验浅表复制(Shallow copy)和深层复制(Deep copy)的不同。浅表复制(Shallow copy)时,如果EmpData类改变时,这个变化也会同时出现在EmpData的克隆对象中;而在深层复制(Deep copy),如果EmpData对象发生改变时,这个变化不会出现在EmpData的克隆对象中。

EmpData类的构造函数读取XML文件并创建Emp对象。

 

实现见(二)

23种设计模式之Prototype模式代码 23种设计模式之Prototype模式代码,这是自己学习Prototype模式顺带写的代码,仅供学习交流 立即下载

相关推荐

使用JAVA代码转word文档之动态生成数据填充(图文详解)

今天跟公司对接了业务,根据业务需求,乙方需求文档是word格式的,而我们的数据是动态数据,每生成一份数据,就要以word的形式给乙方一份邮件!这就给了我们的工作一定的难度和挑战! 通过阅读资料,团队的帮助以及自我测试,终于实现了这个功能!因为在搜索资料方面,发现各位博主讲的比较模糊,自己碰到了很多bug,浪费了很多宝贵的时间,所以今天写了这篇文章,希望对自己以后或者他人有所帮助! 操作第一步:先准...

huaiyan 7719

设计模式简单代码之prototype模式(画圆篇)

/*************************************************************************************************************/* 作者:一雨田(http://blog.youkuaiyun.com/dylgsy/)。本文可随便转贴,但请保留此信息** prototype模式(原型模式),是一个使得新对象不用使用构造

一雨田的专栏 2268

《大明王朝1566》中,朝廷财政危机无法解决的根源分析

财政困局中的财富最终流向三重黑洞:​皇室挥霍​(如嘉靖炼丹修殿)、特权阶层贪腐​(严党年入百万两盐税)、制度性损耗​(宗室供养、低效官僚)。更深层的“钱”其实是被禁锢在道德化治理的牢笼中——当国家用“黄河长江皆可为用”的权术思维替代制度性改革时,财政危机便成为帝制王朝无法逃脱的宿命。

为了小家奋斗 1968

[GoF设计模式]Prototype模式和Mediator模式的C++实现

【Prototype模式】用原型实例指定创建对象的种类,被且通过拷贝这些原型对象创建新的对象。拷贝构造函数应该注意深拷贝和浅拷贝的问题。深拷贝主要是指有指针或者复合对象的情况,而浅拷贝对此只是拷贝了指针,而与其共享同一个副本。编译器提供的默认的拷贝构造函数是按位拷贝的值(Value)类型的拷贝方式。Prototype(下例中的HousePrototype)声明一个克隆自身的接口,而Concre

#define Refuse_无聊@代码.COM Roy_Nee 1707

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6010

Ubuntu20.04安装NVIDIA显卡驱动避坑指南:从.run文件到完美运行

本文详细介绍了在Ubuntu20.04系统上通过.run文件安装NVIDIA显卡驱动的完整流程和避坑技巧。从禁用Nouveau驱动、选择合适显示管理器到处理常见安装问题,提供了一套经过验证的解决方案,帮助用户顺利完成驱动安装并优化性能。

weixin_30776273的博客 602

JAVA设计模式-Prototype

Prototype是很容易理解也很容易使用的一个设计模式,他的意思就是说,我给你一个原型,你照着这个原型给我做一个就行了,至于做好之后我要怎么去修改它让他符合新的需求,这就不管Prototype模式的事了。

1570

自主探索型AI Agent:LLM驱动的好奇心与学习动机

随着人工智能技术的飞速发展,传统的AI系统往往依赖于预设的规则和大量的标注数据,其自主学习和适应新环境的能力有限。自主探索型AI Agent旨在打破这种局限,能够在复杂、未知的环境中自主地进行探索、学习和决策。本文的目的是深入研究在大语言模型(LLM)驱动下,AI Agent如何产生好奇心和学习动机,以及如何实现自主探索的能力。范围涵盖了核心概念、算法原理、数学模型、项目实战、应用场景等多个方面,为读者提供一个全面的技术视角。本文将按照以下结构进行阐述:首先介绍相关背景知识,包括目的、读者和文档结构;

大模型应用工坊 997

研磨设计模式之桥接模式-4

3.4  广义桥接-Java中无处不桥接         使用Java编写程序,一个很重要的原则就是“面向接口编程”,说得准确点应该是“面向抽象编程”,由于在Java开发中,更多的使用接口而非抽象类,因此通常就说成“面向接口编程”了。        接口把具体的实现和使用接口的客户程序分离开来,从而使得具体的实现和使用接口的客户程序可以分别扩展,而不会相互影响。使用接口的程序结构如图12所示: ...

跟着cc学设计 私塾在线学习网 http://sishuok.com 216

DSP的CLA调试技巧

本文介绍了基于TMS320F28377D的CLA(Control Law Accelerator)开发实战教程,涵盖基础配置、编程、调试与优化全流程。主要内容包括:CLA核心特性及其作为实时控制协处理器的优势;开发环境搭建与工程配置要点;CLA任务调度、数据交换及编程约束;调试技巧如断点设置和性能分析方法;进阶应用案例(批量除法运算)及优化策略;以及推荐的学习资源和硬件平台。教程强调数据一致性和任务同步问题,为快速上手CLA开发提供实用指导。

1040

华为OD机试双机位C卷:日志排序 (Py/C/C++/Java/Js/Go)

华为OD机试双机C卷真题【日志排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试-日志排序。

qq_45776114的博客 1754

实现Prototype设计模式

      实现Prototype设计模式Implementing the Prototype design Pattern 当我建立一个类的实例很复杂时,我们可以使用Prototype模式。与其建立很多类的实例,还不如进行适当的修改后,使用最初的实例的副本。使用Prototype模式,可以通过克隆一个原型,减少子类的数量。Prototype模式可以减少类的实例的数量。     

郭岩(guoyan19811021,吉祥)的专栏 880

大厂面经:大疆嵌入式面试题及参考答案(4万字长文:持续更新)

目录 Linux 系统调用的过程,中间发生了什么? 表格总结 Linux 中断流程,谈谈你对中断上下文的理解 中断流程 中断上下文理解 Linuxschedule()函数的原理和调用的时机 schedule()函数原理 调用时机 页表实现机制,分页的缺点? 页表机制 分页的缺点 介绍操作系统的多级反馈调度策略,时间片轮转,在项目中如何指定优先级来调度进程完成快速响应(nice命令) 多级反馈队列调度 时间片轮转 使用nice命令 聊内存分配,进程内存分配,段页式存

大模型大数据攻城狮的专栏 4169

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

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

2401_85767411的博客 628

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

2401_85112308的博客 1028

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

2401_85767310的博客 1012

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

常见设计模式的解析和实现(C++)之四-Prototype模式

<br />常见设计模式的解析和实现(C++)之四-Prototype模式<br /> 作用:<br /> 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。<br /> UML结构图:<br /> 抽象基类:<br /> 1)Prototype:虚拟基类,所有原型的基类,提供Clone接口函数<br /> 接口函数:<br /> 1)Prototype::Clone函数:纯虚函数,根据不同的派生类来实例化创建对象.<br /> 解析:<br /> Prototype模式其实

theshenyang的专栏 418

常见设计模式解析和实现(C++)Prototype模式(原型模式)

作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 UML结构图:   抽象基类: 1)  Prototype:虚拟基类,所有原型的基类,提供Clone接口函数 接口函数: 1)  Prototype::Clone函数:纯虚函数,根据不同的派生类来实例化创建对象。 解析: Prototype模式其实就是常说的“虚拟构造函数”的一个实现,C++的实现机制中

chenyujing1234的专栏 1881

[转贴]JavaScript的Prototype实现

写在前面:    这是我前段时间和Jeff.Yan的一些讨论搞,主要关于JavaScript的Design Pattern,因为没有整理,都是最原始的email内容,我会陆续的贴出一点我给他信,至于他的一些回答和讨论的结果,我会在征求他本人意见的情况下,尽可能完整的贴出来     因为是和Jeff.Yan的讨论稿,对于我发信内容的发表都同时署名,对于他给我的回信,如果征得他本人同意的情况下在文字中

阿赖.NET 1742

设计模式go语言实现----原型模式Prototype

1 定义 原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 UML类图: 原型模式包含以下三个角色: Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。 ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己...

cloudUncle的博客 792

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现

设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) 用原型实例指定创建对象的种类,并且通过复制这些原型,创建新的对象。

Z 551

原型模式(Prototype Design Pattern)及代码实现

什么是 原型模式? 原型模式 指 把一个通过类 示例化后的 对象作为 原型,对此原型 进行 复制,得到一个新的对象,这个新对象 和原型 的 属性等完全相同,并且 用户 可以在此新对象 基础上 进行改变(新增或修改属性); 现实生活中的例子: 1.克隆羊 多莉,对 原有 羊 进行克隆 后 得到一个 完全相同的 新对象(多莉); 2.书籍的 不同版本; 在第一版书籍 出版后,发现一些问题, 需要出版第二版,这时 作者 不会从头开始 一页一页的 写书等等, 作者会在第一版的 进行克隆 生成 第二版..

rgc_520_zyl的博客 579
上一篇: 使用Publish/Subscribe 设计模式达到对象间数据同步(二)
下一篇: 制作带有超级连接的统计图
guoyan19811021
博客等级 码龄24年 5粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值