Prototype Pattern(原型模式)
意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
适用性
• 当要实例化的类是在运行时刻指定时,例如,通过动态装载;
• 为了避免创建一个与产品类层次平行的工厂类层次时;
• 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
结构
参与者:
• Prototype(原型)
— 声明一个克隆自身的接口。
• ConcretePrototype(具体的原型)
— 实现一个克隆自身的操作。
• Client(场景)
— 让一个原型克隆自身从而创建一个新的对象。
例子
阿诺斯瓦辛格主演的《第六日》2000上映。主角叫亚当,来之圣经:上帝在第六日创造了亚当。
在不远的将来,牛、鱼甚至宠物都可以任意克隆,但克隆人类是非法的。但有一天当亚当-吉布森回到家,却发现一个克隆人取代了自己。他被赶出了家门,更遭的是,阴谋的制造者为了掩盖真相,派出杀手追杀亚当灭口。为了逃生,同时也为了重新赢得自己的一切,亚当同神秘的幕后策划者展开了机智的战斗。
优缺点
优点:
性能优良。原型模式是在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
缺点:
逃避构造函数的约束。这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
Prototype Pattern(原型模式)相关推荐
- 进阶学习(3.6) Prototype Pattern 原型模式
1, 什么是原型模式 1.1 通过浅拷贝(Cloneable)或者深拷贝(二进制流), 实现对一个复杂对象的刻复, 减少从零生成对象时消耗的性能 2,有什么业务场景 2.1 数据缓存, 查询数据库 ...
- (Prototype)原型模式的Java实现(转)
原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 当我们已经拥有某个得来不易的宝贝时,往往我们会很想再"变"一些出来,即这个宝贝的& ...
- Prototype(原型模式)
/** * 定义一个全局对象, 属性 Version 在发布的时候会替换为当前版本号 */ var Prototype = { Version: '@@VERSION@@' } /** ...
- 原型模式(Prototype Pattern)
原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- java 肌汉模式_设计模式之原型模式详解(附源代码)
原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- Java设计模式--原型模式
1 Prototype Pattern 原型模式 目的:在运行期通过"复制和粘贴"来创建新对象 : 实现:创建一个原型对象,再通过Java 语言中常用的克隆实现方法复制这个原型对象 ...
- 五、原型模式(Prototype Pattern)
1. 什么是原型模式(Prototype Pattern) 在需要创建大量相同或者相似的对象时,先创建一个原型对象,然后利用这个原型对象进行克隆,从而得到大量对象 java中可以利用Object中的c ...
- 【设计模式】之 Prototype 原型模式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- 精读《设计模式 - Prototype 原型模式》
Prototype(原型模式) Prototype(原型模式)属于创建型模式,既不是工厂也不是直接 New,而是以拷贝的方式创建对象. 意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的 ...
- 23天读懂23种设计模式:原型模式(创建型)
点击上方 蓝字 关注我们 创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建.组合和表示方式. 原型模式目的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ...
最新文章
- 使用Docker搭建WordPress博客(三)nginx镜像制作
- phpstrom 里面的 文件修改后 的*怎样设置
- ASM ClassReader failed to parse class file
- 国庆快乐,送3本Python书
- Jquery-数组删除元素
- 透视宝移动端对Unity手机游戏引擎监控实现
- 计算机cpu的功能和作用是什么意思,什么是中央处理器CPU
- Android吃鸡 3dtouch,绝地求生刺激战场3Dtouch怎么用 刺激战场3Dtouch吃鸡技巧详解
- pypy+uwsgi+dango+nginx 简单部署
- 在线的图片颗粒化效果实现
- 名帖380 张弼 草书《草书帖选》
- 全志芒果派麻雀开发板----新建一个分区并挂载(1)
- 抓取html指定标签内容,javascript怎样获取某个标签的内容?
- java手机游戏星际争霸_java Swing实现的星际争霸游戏源码
- Vuforia提高识别以及稳定性方法总结
- Hive 史上最全面的大数据学习第九篇(五) Hive 自定义函数 每一天都是美好的一天!
- 中国脑磁共振设备行业应用形势与前景动态预测报告2022-2027
- 陈晓和贝恩的真实目的:陈晓不会辞职,贝恩必然会换股
- module java.base does not “opens java.util“ to unnamed module
- 风控决策矩阵的开发与场景应用
热门文章
- 后Hadoop时代的大数据技术思考:数据即服务
- Google BigTable到底解决什么问题?
- TensorFlow全新的数据读取方式:Dataset API入门教程
- Java线程详解(1)-概念与原理
- Android --- 修改百度地图的显示范围的大小
- IDEA打开vue项目,每次打开的都是上一次的vue项目,即同一个vue项目,解决方法
- Java 洛谷 P1035 级数求和
- 黑龙江省:2025年将建成5G基站11.4万个,15万数据中心机架
- 发改委最新《产业结构调整目录》公布!数据中心列入鼓励产业条目
- 多元函数严格凹 海塞矩阵正定_海森矩阵的应用:多元函数极值的判定