作者:手机用户2602910191_702 | 来源:互联网 | 2023-09-04 13:06
如果对象的创立老本比拟大,而同一个类的不同对象之间差异不大(大部分字段都雷同),在这种状况下,咱们能够利用对已有对象(原型)进行复制(或者叫拷贝)的形式来创立新对象,以达到节俭创立工夫的目标。
应用场景
如果 对象的创立老本比拟大,而 同一个类的不同对象之间差异不大(大部分字段都雷同),在这种状况下,咱们能够利用对已有对象(原型)进行复制(或者叫拷贝)的形式来创立新对象,以达到节俭创立工夫的目标。
何为“对象的创立老本比拟大”?
如果对象中的数据须要通过简单的计算能力失去(比方排序、计算哈希值),或者须要从 RPC、网络、数据库、文件系统等十分慢速的 IO 中读取,这种状况下,咱们就能够利用原型模式,从其余已有对象中间接拷贝失去,而不必每次在创立新对象的时候,都反复执行这些耗时的操作。
原型模式的实现形式:深拷贝和浅拷贝
要应用原型模式,咱们就须要对对象进行拷贝,这里咱们要先理解下深拷贝和浅拷贝。
浅拷贝和深拷贝的区别在于,浅拷贝只会复制数据的内存地址,而深拷贝会复制数据自身。因而,浅拷贝与原始对象共享数据对象,原始对象如果批改了数据值,拷贝的对象也会变为新的值;而深拷贝失去的是一份完完全全独立的对象,不会受原对象影响。
在 Java 语言中,Object 类的 clone() 办法执行的就是咱们刚刚说的浅拷贝。它只会拷贝对象中的根本数据类型的数据(比方,int、long),以及援用对象的内存地址,不会递归地拷贝援用对象自身。
那如何实现深拷贝呢?
- 递归拷贝对象、对象的援用对象以及援用对象的援用对象……直到要拷贝的对象只蕴含根本数据类型数据,没有援用对象为止。
- 先将对象序列化,而后再反序列化成新的对象。