設計模式 -原型模式 (Prototype)
一、基本介紹
- 原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象
- 原型模式是一個創建型設計模式,允許一個對象再創建另外一個可定製的對象,不需要知道創建的細節
- 工作原理:通過將一個原型對象傳給那個要發動創建的對象,這個要發動創建的對象通過請求原型對象拷貝它們自己來進行創建,
對象.clone()
二、注意事項
-
淺拷貝
淺拷貝 只對 基本數據類型其真正的拷貝作用,對於引用類型來說的話,只是簡單的對引用類型地址進行了拷貝,即使進行了多次的淺拷貝,多個對象中地引用類型還是指的同一個
-
深拷貝
深拷貝用來解決淺拷貝問題
深拷貝實現方式:
-
方式一:重寫 clone 方法進行實現深拷貝
super.clone()
-
方式二:通過對象序列化進行深拷貝
推薦使用
public Object deepClone() { ByteArrayOutputStream byteArrayOutputStream = null; ObjectOutputStream objectOutputStream = null; ByteArrayInputStream byteArrayInputStream = null; ObjectInputStream objectInputStream = null; try { byteArrayOutputStream = new ByteArrayOutputStream(); objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(this); byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); objectInputStream = new ObjectInputStream(byteArrayInputStream); SpringDemo springDemo = (SpringDemo) objectInputStream.readObject(); return springDemo; } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally { try { byteArrayInputStream.close(); byteArrayInputStream.close(); objectOutputStream.close(); byteArrayInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return null; }
-