写点什么

设计模式之原型模式

作者:乌龟哥哥
  • 2022 年 5 月 13 日
  • 本文字数:587 字

    阅读完需:约 2 分钟

设计模式之原型模式

使用场景

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

何为“对象的创建成本比较大”?

如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从 RPC、网络、数据库、文件系统等非常慢速的 IO 中读取,这种情况下,我们就可以利用原型模式,从其他已有对象中直接拷贝得到,而不用每次在创建新对象的时候,都重复执行这些耗时的操作。

原型模式的实现方式:深拷贝和浅拷贝

要使用原型模式,我们就需要对对象进行拷贝,这里我们要先了解下深拷贝和浅拷贝。


浅拷贝和深拷贝的区别在于,浅拷贝只会复制数据的内存地址,而深拷贝会复制数据本身。因此,浅拷贝与原始对象共享数据对象,原始对象如果修改了数据值,拷贝的对象也会变为新的值;而深拷贝得到的是一份完完全全独立的对象,不会受原对象影响。


在 Java 语言中,Object 类的 clone() 方法执行的就是我们刚刚说的浅拷贝。它只会拷贝对象中的基本数据类型的数据(比如,int、long),以及引用对象的内存地址,不会递归地拷贝引用对象本身。

那如何实现深拷贝呢?

  • 递归拷贝对象、对象的引用对象以及引用对象的引用对象……直到要拷贝的对象只包含基本数据类型数据,没有引用对象为止。

  • 先将对象序列化,然后再反序列化成新的对象。

发布于: 刚刚阅读数: 2
用户头像

乌龟哥哥

关注

正在努力寻找offer的大四小菜鸟 2021.03.16 加入

擅长 Hbuilder、VS Code、MyEclipse、AppServ、PS 等软件的安装与卸载 精通 Html、CSS、JavaScript、jQuery、Java 等单词的拼写 熟悉 Windows、Linux、 等系统的开关机 看–时间过得多快,不说了,去搬砖了

评论

发布
暂无评论
设计模式之原型模式_5月月更_乌龟哥哥_InfoQ写作社区