原型模式(Prototype)

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

一、定义

使用原型实例指定创建对象的种类,并且通过拷贝这些原 型创建新的对象。原型模式是一种对象创建型模式。

二、结构

Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。

ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象

Client(客户类):让一个原型对象克隆自身从而创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象,

再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类,

系统具有较好的可扩展性,增加或更换具体原型类都很方便。

三、优点

当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例可以提高新实例的创建效率。

可以使用深复制的方式保存对象的状态。将对象复制一份并将其状态保存起来,以便于在使用的时候使用,比如恢复到某一个历史状态,可以辅助实现撤销操作。

四、缺点

需要为每一个类配备一个克隆方法,而且该克隆方法位于一个类的内部,当对已有的类进行改造时,需要修改源代码,违背了开闭原则。

为了支持深复制,当对象之间存在多重嵌套引用关系时,每一层对象都必须支持深复制,实现起来可能比较麻烦。

五、应用场景

最主要的应用场景就在于创建新对象成本较大(例如初始化需要占用较长的时间,占用太多的CPU资源或者网络资源),

新的对象可以通过原型模式对已有对象进行复制来获得。如果是相似对象,则可以对其成员变量稍作修改。

六、个人总结

1、当你需要多个属性相同的对象的时候,而且创建新对象的成本较大,需要请求外部资源等,就可以考虑原型模式

2、你可以理解成,原型模式就是克隆几个相同的对象,或者是相似的对象只是稍作修改的情况

3、注意浅拷贝和深拷贝的区别

浅拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.

深拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制.

参考博客:http://www.cnblogs.com/edisonchou/p/6798743.html

大战设计模式【23】—— 原型模式相关推荐

  1. 【GOF23设计模式】原型模式

    [GOF23设计模式]原型模式 来源:http://www.bjsxt.com/  一.[GOF23设计模式]_原型模式.prototype.浅复制.深复制.Cloneable接口  浅复制 1 pa ...

  2. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:webabcd 介绍 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. ...

  3. 教你如何一篇博客读懂设计模式之—--原型模式

    教你如何一篇博客读懂设计模式之----原型模式 what:是什么 原型模式: 用于创建重复的对象,既不用一个属性一个属性去set和get,又不影响性能,原型模式产生的对象和原有的对象不是同一个实例,他 ...

  4. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  5. C#设计模式(6)——原型模式(Prototype Pattern)

    一.引言 在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在 ...

  6. 设计模式回顾——原型模式(C++)

    文章目录 1 前言 2 什么是原型模式 2.1 原型模式组成 2.2 原型模式UML图 2.3 原型模式作用 3 原型模式优缺点 4 什么地方使用原型模式 5 原型模式实现 6 原型模式与构造函数 1 ...

  7. 设计模式之 原型模式

    原型模式应用场景举例:  GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让MM有些不高心,MM说回复信息这 ...

  8. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之原型模式

    · 原型模式在王者荣耀中的应用 · 一.简述 在王者荣耀中,克隆模式算是一个人气比较高的娱乐模式了,因为该模式下双方可以各有五个一模一样的英雄,可以带给玩家不同的游戏体验,特别是有一些比较好玩的英雄, ...

  9. 23天读懂23种设计模式:原型模式(创建型)

    点击上方 蓝字 关注我们 创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建.组合和表示方式. 原型模式目的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...

  10. 23种设计模式之原型模式代码实例

    原型模式就是利用一个克隆"原型"来产生新对象的一种模式, 克隆又分浅克隆与深克隆, 浅克隆:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的. ...

最新文章

  1. LeetCode 965 Univalued Binary Tree--判断二叉树的所有节点的值是否相同--python,java解法
  2. 在windows下架设openssh实现资源共享
  3. android Camera2
  4. SQL SERVER 2005 通过链接服务器 访问 ORACLE 的快速设定方法
  5. caffe不支持relu6_国产AI框架再进化!百度Paddle Lite发布:率先支持华为NPU在线编译,全新架构更多硬件支持...
  6. maven release插件将一版本发布到仓库中时Return code is: 401, ReasonPhrase:Unauthorized
  7. 面向切面编程:操作日志
  8. python网络编程案例_python网络编程实例简析
  9. 数据平台之企业营销管理与分析平台建设
  10. PHP使用 uEditor富文本编辑器
  11. 寒霜朋克计算机丢失,Frostpunk寒霜朋克冰汽时代已停止工作修复补丁(Windows6.1-KB2670838-x64)...
  12. apache-ant-1.7 下载
  13. 完全指南:在 Linux 中如何打印和管理打印机
  14. 【刷题打卡】day7-BFS
  15. python + opencv 框选出图片中人脸
  16. jQuery Marquee
  17. 可编程直流稳压电源如何保养维护?
  18. 帆软报表查询结果为空时不显示报表内容
  19. 基于JAVA电子设备销售网站计算机毕业设计源码+系统+lw文档+部署
  20. SAP 批量BOM创建BAPI : BAPI_MATERIAL_BOM_GROUP_CREATE

热门文章

  1. 大规模业务服务器开发总结
  2. Java反射机制分析指南
  3. 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第二弹)
  4. Hadoop CDH4.5 HBase部署
  5. windows phone (26) ApplicationBar应用程序栏
  6. 我和我的Android
  7. mysql对时间操作系统_MySQL时间操作的系统函数用法
  8. mysql internal_MySQLInternal笔记
  9. 计算机绘图 招聘,计算机绘图-网课答案.pdf
  10. ubuntu下oracle数据的导入,导入oracle数据库命令行