博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大战设计模式【23】—— 原型模式
阅读量:4986 次
发布时间:2019-06-12

本文共 1003 字,大约阅读时间需要 3 分钟。

原型模式(Prototype)

 

设计模式使用的例子

 

一、定义

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

 

二、结构

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

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

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

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

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

 

三、优点

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

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

 

四、缺点

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

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

 

五、应用场景

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

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

 

六、个人总结

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

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

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

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

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

 

 

 

参考博客:

转载于:https://www.cnblogs.com/linkstar/p/7810951.html

你可能感兴趣的文章
HTML5-盒子的使用
查看>>
Swift之单例模式
查看>>
20180918-2 每周例行报告
查看>>
网站目录文件权限的简单安全设置
查看>>
android分享到代码
查看>>
Android 屏幕切换效果实现 (转)
查看>>
我的2015技术学习流水账
查看>>
JQuery上传插件Uploadify使用详解
查看>>
python 批量更改文件名
查看>>
DRF频率、分页、解析器、渲染器
查看>>
LeetCode(11)题解: Container With Most Water
查看>>
【uva11987】带删除的并查集
查看>>
Redis设置认证密码
查看>>
终于有人把P2P、P2C、O2O、B2C、B2B、C2C的区别讲透了!还有许多其它类别的类型分享...
查看>>
Auth认证
查看>>
Elasticsearch索引模板和别名
查看>>
HTTP协议的8种请求类型介绍
查看>>
[收藏]Oracle技术网里的链接
查看>>
varchar和Nvarchar区别
查看>>
2o_TwoTips
查看>>