zoukankan      html  css  js  c++  java
  • 无废话设计模式(4)原型模式

    0-前言

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

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

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

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

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

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

    1-深复制实现

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

    1、编写深复制工具类

    /**
     * @description: 通过序列化实现对象的深拷贝
     * @author: anson
     * @Date: 2020/7/31 13:59
     */
    public class CloneUtils
    {
        @SuppressWarnings("unchecked")
        public static <T 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对象有几层有多少引用对象,都能完整的复制副本;

  • 相关阅读:
    Spring Cloud Ribbon实现客户端负载均衡
    Spring Boot 初步小结
    日志配置
    外部属性文件的使用
    运行jar
    类型安全的配置文件
    java动态代理中的invoke方法是如何被自动调用的(转)
    数据库为什么要用B+树结构--MySQL索引结构的实现(转)
    Java transient关键字使用小记(转)
    面试题思考:Java 8 / Java 7 为我们提供了什么新功能
  • 原文地址:https://www.cnblogs.com/yanghj/p/13409476.html
Copyright © 2011-2022 走看看