原型設計模式
原型模式(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乙個當...