原型模式學習筆記

2021-10-09 06:55:09 字數 1862 閱讀 6697

原型模式(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...