乐趣区

关于设计模式:设计模式之原型模式

应用场景

如果 对象的创立老本比拟大 ,而 同一个类的不同对象之间差异不大(大部分字段都雷同),在这种状况下,咱们能够利用对已有对象(原型)进行复制(或者叫拷贝)的形式来创立新对象,以达到节俭创立工夫的目标。

何为“对象的创立老本比拟大”?

如果对象中的数据须要通过简单的计算能力失去(比方排序、计算哈希值),或者须要从 RPC、网络、数据库、文件系统等十分慢速的 IO 中读取,这种状况下,咱们就能够利用原型模式,从其余已有对象中间接拷贝失去,而不必每次在创立新对象的时候,都反复执行这些耗时的操作。

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

要应用原型模式,咱们就须要对对象进行拷贝,这里咱们要先理解下深拷贝和浅拷贝。

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

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

那如何实现深拷贝呢?

  • 递归拷贝对象、对象的援用对象以及援用对象的援用对象……直到要拷贝的对象只蕴含根本数据类型数据,没有援用对象为止。
  • 先将对象序列化,而后再反序列化成新的对象。
退出移动版