T19-原型模式(周丹).pdfVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
T19-原型模式(周丹)

设计模式之 原型模式 摘要  1、原型模式的特点和使用场景  2、浅复制和深复制的原理。  3、原型模式的实现方案。  4、总结原型模式。 1、原型模式的特点及使用场景 原型模式的主要思想是基于现有的对象克隆一 个新的对象出来,一般是有对象的内部提供克隆的 方法,通过该方法返回一个对象的副本,这种创建 对象的方式,相比我们之前说的几类创建型模式还 是有区别的,之前的讲述的工厂模式与抽象工厂都 是通过工厂封装具体的new操作的过程,返回一个新 的对象,有的时候我们通过这样的创建工厂创建对 象不值得,特别是以下的几个场景的时候,可能使 用原型模式更简单也效率更高。 1、原型模式的特点及使用场景 场景1: 如果说我们的对象类型不是刚开始就能确定, 而是这个类型是在运行期确定的话,那么我们通过 这个类型的对象克隆出一个新的类型更容易。 例如我们有的时候在处理DataTable中的记录进 行筛选后,放在一个新的DataTable 中,我们知道 如果说2个dataTable的架构不同,那么必须手动的 显示的赋值,否则无法使用如下方式进行导入数据。 下面给出测试的相关代码和说明: DataTableDemo.TXT 1、原型模式的特点及使用场景 场景2: 有的时候我们可能在实际的项目中需要一个对象在某个状态下的副 本,这个前提很重要,这点怎么理解呢,例如有的时候我们需要对比一个 对象经过处理后的状态和处理前的状态是否发生过改变,可能我们就需要 在执行某段处理之前,克隆这个对象此时状态的副本,然后等执行后的状 态进行相应的对比,这样的应用在项目中也是经常会出现的。 假设我们有这样的需求,我们在ORM(对象/关系数据库映射)框架的 设计中,经常会遇到这样的问题,我们在处理某个对象的编辑状态的时候, 我们想框架给我们生成的更新数据库的SQL语句,不包含数据列没有发生 变化的列,不要出现在更新语句中,这个时候,可能一个方案会是,编辑 前克隆一个对象,然后等编辑后提交的时候,生成相应的语句时进行对比 之前克隆的对象,看看是否数据发生变化,如果说对象的部分数据列发生 变化,那么就只是把变化的数据列进行更新。 当然上面我只是给出了一种比较简单的,但是效率不是很高的实现 方案,还有很多好的方案我就不讨论了,这里只是为了说明原型模式的可 用场景。 如果对上面的方式不是很理解或者看文字比较累的话,可以看下面 的图,应该就比较清晰了。 1、原型模式的特点及使用场景 场景3: 当我们在处理一些对象比较简单,并且对象之间的 区别很小,可能只是很固定的几个属性不同的时候,可能 我们使用原型模式更合适,例如我们的生活中的颜色的克 隆:我们都可以通过红色来克隆其他的所有颜色,只是修 改相应的个别属性即可,远比创建一个新的对象,然后给 对象的各个属性赋值来的简单和方便,当然有的时候,如 果我们并不需要基于现有的对象复制新的对象,或者我们 需要的就是一个干净的空对象,那么我的首先还是工厂模 式或者抽象工厂模式啦。 2、浅复制和深复制的原理 这里说道的浅复制和深复制对应的就是C++的浅拷贝和深拷 贝构造函数。 深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当 这个类的对象发生复制过程的时候,资源重新分配,这个过程就是 深拷贝,反之,没有重新分配资源,就是浅拷贝。下面举个深拷贝 的例子。 如果在类中没有显式地声明一个拷贝构造函数,那么,编译 器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之 间的位拷贝。位拷贝又称浅拷贝,后面将进行说明。 自定义拷贝构造函数是一种良好的编程风格,它可以阻止编 译器形成默认的拷贝构造函数,提高源码效率。 3、原型模式的实现方案 工程结构: (1)原型抽象类 Prototype.h (2 )具体原型类 ConcretePrototypeA (在P

文档评论(0)

hhuiws1482 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档