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物件有幾層有多少參考物件,都能完整的復制副本;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/3119.html
標籤:設計模式
上一篇:無廢話設計模式(3)建造者模式
