原型模式(prototype pattern)是指原型例項指定建立物件的種類,並且通過拷貝這些 原型建立新的物件
類初始化消耗資源較多,或者建構函式比較複雜
new 產生的乙個物件需要非常繁瑣的過程(資料準備、訪問許可權等),因為原型模式是在記憶體中對這個物件進行拷貝,要比直接new這個物件效能要好很多,在這種情況下,需要的物件越多,原型模式體現出的優點越明顯
需要乙個物件的大量公共資訊,少量字段進行個性化設定的時候,或者迴圈體中生產大量物件時
public
class
protoype
implements
cloneable
@override
protected protoype clone()
throws clonenotsupportedexception
public
static
void
main
(string[
] args)
throws clonenotsupportedexception
}
輸出:
由此可見,只輸出了一次語句,使用clone()方法時,未呼叫建構函式
new的時候,jvm要走一趟類載入流程,這個流程非常麻煩,在類載入流程中會呼叫建構函式,最後生成的物件會放到堆中,而拷貝就是直接拷貝堆中的現成的二進位制物件,然後重新乙個分配記憶體塊。
public
class
protoype
implements
cloneable
@override
protected protoype clone()
throws clonenotsupportedexception
public
static
void
main
(string[
] args)
throws clonenotsupportedexception
輸出結果:
只是完整 複製了值型別資料,沒有賦值引用物件,只是將引用的指標指向了原物件
在淺拷貝中,我們只能轉殖到基礎的資料型別,那麼實現深轉殖,我們需要將引用資料型別的物件重新new出來,並且使拷貝出的物件中的引用指向新建立出的物件(包括陣列)
@override
protected protoype clone()
throws clonenotsupportedexception
如果我們轉殖的目標的物件是單例物件,那意味著,深轉殖就會破壞單例。實際上防止 轉殖破壞單例解決思路非常簡單,禁止深轉殖便可。要麼你我們的單例類不實現 cloneable 介面;要麼我們重寫 clone()方法,在 clone 方法中返回單例物件即可
@override
protected object clone()
throws clonenotsupportedexception
arraylist 就實現了 cloneable 介面,來看** clone()方法的實現:
public object clone()
catch
(clonenotsupportedexception e)
}
學習筆記 原型模式
模擬實現 1 import j a.util.date 23 4 原型模式 通過乙個已經建立好的物件來轉殖出同樣的其他物件 屬性一樣,通過實現cloneable介面來實現 5 分為深拷貝和淺拷貝,要進行深拷貝,需要對原物件的引用型別屬性也進行拷貝,或者用序列化的方式也可以實現深拷貝 6 該模式有利於...
學習設計模式 原型模式
說明 通過原型模式可以自動複製乙個例項化物件a給新的物件例項化物件b,這樣可以省去很多例項化 重複 的工作,便於維護。轉殖分為淺轉殖和深轉殖,淺轉殖只轉殖基礎型別資訊,對於類似物件這樣的複雜型別資訊,只轉殖這個物件的引用 深轉殖是基礎型別和複雜型別都轉殖其值,而不僅僅是轉殖引用 需求 複製簡歷,需要...
原型模式 學習手記
用原型例項指定建立物件的種類,並用通過拷貝這些原型來建立新的例項。模型圖 在.net中可以通過icloneable來實現 public class knife icloneable public string aggressivity public string property public vo...