模式定義:
用原型執行個體指定建立對象的種類,并且通過複制這些原型建立新的對象。原型模式允許一個對象再建立另外一個可定制的對象,無須知道任何建立的細節。
應用場景:
(1) ctrl c, ctrl v
複制,粘貼
ctrl c, ctrl v
(2) struct2 建立action 對象
在Struts2中為了保證線程的安全性,Action對象的建立使用了原型模式,通路一個已經存在的Action對象時将通過克隆的方式建立出一個新的對象,進而保證其中定義的變量無須進行加鎖實作同步
(3) Spring 可采用原型模式建立Bean類
在Spring中,使用者也可以采用原型模式來建立新的bean執行個體,進而實作每次擷取的是通過克隆生成的新執行個體,對其進行修改時對原有執行個體對象不造成任何影響
(4)參數傳入。
參數傳入。若傳入的參數類似List(操作後可能會改變内部排序,資料等等),而又不想其改變,那麼就clone一個傳入。————(忘了再哪本書上看到的。。。)
模式實作:
淺克隆 :
屬性均為基本類型
倘若有個複雜屬性
是以淺 clone
clone
深克隆 :
是以深 clone
clone
底層原理:
前言:雖然clone是native,但也阻擋不了我們想象,(^__^) 嘻嘻……
public Object deepClone() throws IOException, ClassNotFoundException, OptionalDataException {
//将對象寫入流中
ByteArrayOutputStream bao=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(bao);
oos.writeObject(this);
//将對象從流中取出
ByteArrayInputStream bis=new ByteArrayInputStream(bao.toByteArray());
ObjectInputStream ois=new ObjectInputStream(bis);
return(ois.readObject());
}