设计模式5-原型模式

25次阅读

共计 694 个字符,预计需要花费 2 分钟才能阅读完成。

原型模式的应用场景,以及它的两种实现方式:深拷贝和浅拷贝。

1. 原型模式(Prototype Design Pattern)

如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。

这种基于原型来创建对象的方式 就叫作原型设计模式(Prototype Design Pattern),简称原型模式。

1.1 对象的创建成本比较大?

创建对象:申请内存、给成员变量赋值这一过程,一般情况下,这一过程耗费时间不大。
但某些情况下,创建对象给对象赋值时,可能需要从 IO 设备中读取数据,比如:数据库 / 文件 等。再之,对 对象进行排序、计算哈希值,这种情况下,可能就比较耗时了

在这种情况下,原型模式,便可以派上用场了。

1.2 深拷贝和浅拷贝

在原型模式中,需要特别注意的是,深拷贝和浅拷贝。因为不同的场景,这两种拷贝方式,会带来不一样的结果。

浅拷贝只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象……

深拷贝得到的是一份完完全全独立的对象。所以,深拷贝比起浅拷贝来说,更加耗时,更加耗内存空间。

如果要拷贝的对象是不可变对象,浅拷贝共享不可变对象是没问题的

但对于可变对象来说,浅 拷贝得到的对象和原始对象会共享部分数据,就有可能出现数据被修改的风险,也就变得复杂多了。除非像我们今天实战中举的那个例子,需要从数据库中加载 10 万条数据并构建散列表索引,操作非常耗时,比较推荐使用浅拷贝,否则,没有充分的理由,不要为了一点点的性能提升而使用深拷贝。

正文完
 0