通過複製生成例項的 Prototype模式

2021-10-10 00:03:54 字數 2046 閱讀 1242

拓展思路

相關設計模式

滿足的原則

需要乙個類的大量物件的時候,使用原型模式是最佳選擇,因為原型模式是在記憶體中對這個物件進行拷貝,要比直接new這個物件效能要好很多,在這種情況下,需要的物件越多,原型模式體現出的優點越明顯。

如果乙個物件的初始化需要很多其他物件的資料準備或其他資源的繁瑣計算,那麼可以使用原型模式。

當需要乙個物件的大量公共資訊,少量字段進行個性化設定的時候,也可以使用原型模式拷貝出現有物件的副本進行加工處理。

由於clone方法是由虛擬機器直接複製記憶體塊執行,所以在速度上比使用new的方式建立物件要快。

可以基於原型,快速的建立乙個物件,而無需知道建立的細節。

可以在執行時動態的獲取物件的型別以及狀態,從而建立乙個物件。

配備轉殖方法需要對類的功能進行通盤考慮,這對於全新的類不是很難,但對於已有的類不一定很容易,特別當乙個類引用不支援序列化的間接物件,或者引用含有迴圈結構的時候。

實現原型模式每個派生類都必須實現 clone介面。

逃避建構函式的約束。

示例程式的類圖

示例**

public

class

product

implements

cloneable

public

product

(int id, string name)

public

intgetid()

public

void

setid

(int id)

public string getname()

public

void

setname

(string name)

@override

protected object clone()

throws clonenotsupportedexception

@override

public string tostring()

}

public

class

order

implements

cloneable

public

order

(int num, string name, product product)

public

intgetnum()

public

void

setnum

(int num)

public string getname()

public

void

setname

(string name)

public product getproduct()

public

void

setproduct

(product product)

@override

protected object clone()

throws clonenotsupportedexception

@override

public string tostring()

}

public

class

main

list.

add(order)

; system.out.

println

("共有"

+list.

size()

+"份訂單");

for(

int i=

0; i

size()

; i++)}

}

PHP物件的淺複製與深複製的例項詳解

最近在看原型模式時注意到這個問題 php中物件 與 clone 的區別 例項 聚合類 class obja 只有實現了下面方法聚合類 才能實現深複製 function clone class objb 原型物件 obja new obja 複製物件 複製引用 obja2 obja obja2 num...

通過 IndexOf查詢指定的內容例項

今天想學flash as3 網上找到矽谷動力 private string down string url 這裡建立了乙個執行緒函式 private void therd else 建立委託函式 更新介面 private delegate void delegatewriteresult int i...

通過例項來實現split的理解

首先將這個url的各個部分區分開來,用split url,以下是具體的 parts split url,此時parts就有三部分,parts 0 ftp,parts 1 username,parts 2 password server 接下來剔除沒有用到的資訊 由於只取username,所以其中pa...