原型模式

35 阅读1分钟

原型模式的作用

  • 快速,高效的创建对象
  • 用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。
  • 创建对象时通过拷贝当前对象来创建新的对象,即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);
 }