原型模式的作用
- 快速,高效的创建对象
- 用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。
- 创建对象时通过拷贝当前对象来创建新的对象,即newObject=oldObject.clone()。
说明
- 数据类型是基本数据类型或String,浅拷贝直接进行值传递,即将属性值直接复制一份给新的对象。
- 数据类型是引用类型(对象、数组),浅拷贝会进行引用传递,也就是将成员变量的引用值(内存地址)复制一份给新的对象。如属性A是一个引用类型,那么浅拷贝后newObject.A=oldObject.A。如果A有修改,将影响到newObject和oldObject。
- 深拷贝可以使用:对象转json后将json转成对象的方式;
blankj.utilcode deepClone的源码:
public final class CloneUtils {
private CloneUtils() {
throw new UnsupportedOperationException("u can't instantiate me...");
}
/**
* Deep clone.
*
* @param data The data.
* @param type The type.
* @param <T> The value type.
* @return The object of cloned.
*/
public static <T> T deepClone(final T data, final Type type) {
try {
return UtilsBridge.fromJson(UtilsBridge.toJson(data), type);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
static String toJson(final Object object) {
return GsonUtils.toJson(object);
}
static <T> T fromJson(final String json, final Type type) {
return GsonUtils.fromJson(json, type);
}