无废话设计模式(4)原型模式

0-前言

  所谓原型模式,简单点说就是复制副本;

  而复制,有浅复制和深复制之分,

  浅复制:只能复制第一层基本类型的值,对于第二层引用类型的值不能复制;

  深复制:复制所有层次,是完整对象的完整复制;

  浅复制一般通过实现Cloneable接口来实现,但是这种方法,实际上没啥用,实际项目中是基本不用这种方法的;

  实际项目中一般都采用深复制的方式,主要是通过序列化的方式来实现对象的整个完整复制;

 

1-深复制实现

下面通过序列化的方式来实现对象深复制

1、编写深复制工具类

/**
 * @description: 通过序列化实现对象的深拷贝
 * @author: anson
 * @Date: 2020/7/31 13:59
 */
public class CloneUtils
{
    @SuppressWarnings("unchecked")
    public static extends Serializable> T clone(T obj){
        T cloneObj = null;
        try {
            //写入字节流
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream obs = new ObjectOutputStream(out);
            obs.writeObject(obj);
            obs.close();

            //分配内存,写入原始对象,生成新对象
            ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(ios);
            //返回生成的新对象
            cloneObj = (T) ois.readObject();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cloneObj;
    }

}

客户端:

User cloneuser = CloneUtils.clone(user2);

无论POJO对象有几层有多少引用对象,都能完整的复制副本;

你可能感兴趣的:(无废话设计模式(4)原型模式)