設計模式之原型設計模式

2021-10-25 14:39:15 字數 2350 閱讀 2654

原型設計模式

原型模式(prototype pattern)是用於建立重複的物件,同時又能保證效能。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式是實現了乙個原型介面,該介面用於建立當前物件的轉殖。當直接建立物件的代價比較大時,則採用這種模式。例如,乙個物件需要在乙個高代價的資料庫操作之後被建立。我們可以快取該物件,在下乙個請求時返回它的轉殖,在需要的時候更新資料庫,以此來減少資料庫呼叫。

說起原型設計模式,必然離不開淺拷貝和深拷貝,提前劇透,淺拷貝對於引用物件的屬性,拷貝前後其實是共享的,換句話說,加入類a的屬性是類b,現在a a1=new a(),淺拷貝賦值乙份a1名為a2,修改a1.getb().set***,那麼a2的b屬性也將會被修改,深拷貝則不會出現此問題

淺拷貝**實現

//person類,實現cloneable很關鍵

@data

@allargsconstructor

@noargsconstructor

public

class

person

implements

cloneable

, serializable

person person =

(person)

super

.clone()

;return person;

}}

@data

@allargsconstructor

@noargsconstructor

public

class

idcard

implements

serializable

//測試用例

public

class

shallowcopy

}

//測試結果

原物件person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

110, type=身份證)

)轉殖物件

person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

110, type=身份證)

)是否相等

false

====

====進行修改

原物件person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

220, type=護照)

)轉殖物件

person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

220, type=護照)

)

深拷貝**實現

public

class

deepcopy

public

static

void

main

(string[

] args)

throws exception

}

//測試用例

原物件person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

110, type=身份證)

)轉殖物件

person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

110, type=身份證)

)是否相等

false

====

====進行修改

原物件person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

220, type=護照)

)轉殖物件

person

(name=lezzy, ***=man, idcard=

idcard

(cardnum=

110, type=身份證)

)

總結:

深拷貝可以通過序列化進行實現,後續在補充

設計模式領悟之 原型設計模式

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。ps 當我們需要建立大量相同物件的時候,就可以用原型模式大批量複製物件。和現實生活中 的影印機相似,通過乙個原型 模板 批量複製相同的物件 複製需要用到memberwiseclone 方法 1,淺複製 如果欄位是值型別的,則對該字段進行...

java設計模式之原型設計模式

原型設計模式 顧名思義,該模式的思想就是將乙個物件作為原型,對其進行複製 轉殖,產生乙個和原物件類似的新物件 設計思路 第一步 建立乙個類prototypemode,實現cloneable介面 第二步 在prototypemode中定義shallowclone方法 淺複製物件實現 和deepclon...

設計模式 原型設計模式

建立型的模式,最後一種原型設計模式。是一種使用起來簡單,可以配合單例模式或是工廠設計模式使用的。先看一下,原型設計模式是怎麼回事兒吧。如果想使用原型設計模式。必須滿足乙個條件,首先實現cloneable介面,然後重寫clone方法。這樣就算是完成了,然後就開始測試了 建立完物件以後給phone乙個當...