原型模式的定義:
使用原型實(shí)例指定創(chuàng)建對(duì)象的種類。并且通過(guò)克隆這個(gè)原型創(chuàng)造新的對(duì)象满败,是一種創(chuàng)建型模式。
原型模式的結(jié)構(gòu)圖:
原型模式的主要優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1.當(dāng)創(chuàng)建新的對(duì)象實(shí)例較為復(fù)雜時(shí)茅信,使用原型模式可以簡(jiǎn)化對(duì)象的創(chuàng)建過(guò)程屹徘,通過(guò)復(fù)制一個(gè)已有實(shí)例可以提高新實(shí)例的創(chuàng)建效率。
2.擴(kuò)展性較好沐旨,由于原型模式中提供了抽象原型類森逮,在客戶端可以針對(duì)抽象原型類進(jìn)行編程,而將具體原型類寫(xiě)在配置文件中磁携。增加或減少具體原型類對(duì)原有系統(tǒng)都沒(méi)有任何印象褒侧。
3.原型模式可以提供創(chuàng)建結(jié)構(gòu)。工廠模式常常要有一個(gè)與產(chǎn)品類等級(jí)結(jié)構(gòu)相同的工廠等級(jí)結(jié)構(gòu)。而原型模式就不需要這樣闷供,原型模式中產(chǎn)品的復(fù)制是通過(guò)封裝在原型類中的克隆方法實(shí)現(xiàn)的烟央,無(wú)需專門(mén)的工廠類來(lái)創(chuàng)建產(chǎn)品。
4.可以使用深克隆方式保存對(duì)象的狀態(tài)这吻。
缺點(diǎn):
1.需要為每一個(gè)類配置一個(gè)克隆方法吊档,而且該克隆方法位于一個(gè)類的內(nèi)部,當(dāng)對(duì)已有的類進(jìn)行改造時(shí)唾糯,需要修改源代碼怠硼,違背了開(kāi)閉原則。
2.在實(shí)現(xiàn)深克隆是偶需要編寫(xiě)復(fù)雜的代碼移怯。而且當(dāng)對(duì)象之間的多重的嵌套引用時(shí)香璃,為了實(shí)現(xiàn)深克隆,每一層對(duì)象都對(duì)應(yīng)的類都必須支持深克隆舟误。
原型模式實(shí)用場(chǎng)景
1.創(chuàng)建新對(duì)象成本較大葡秒,對(duì)象可以通過(guò)原型模式對(duì)已有對(duì)象進(jìn)行復(fù)制獲得。如果相似對(duì)象則可以對(duì)其成員變量稍作修改嵌溢。
2.如果系統(tǒng)要保存對(duì)象的狀態(tài)眯牧,而對(duì)象的狀態(tài)變化小±挡荩或者對(duì)象本身占用內(nèi)存比較小学少,或者對(duì)象本身占用內(nèi)存比較少時(shí),可以使用原型模式配合備忘錄模式實(shí)現(xiàn)
3.需要避免使用分層次的工廠類來(lái)創(chuàng)建分層次的對(duì)象秧骑。并且類的實(shí)例對(duì)象只有一個(gè)或者很少的組合狀態(tài)版确,通過(guò)復(fù)制原型對(duì)象得到新實(shí)例可能比使用構(gòu)造函數(shù)創(chuàng)建一個(gè)新實(shí)例方便。
淺克隆和深克隆
淺克隆
對(duì)自己的成員變量,值引用的類型進(jìn)行值復(fù)制乎折,地址引用的進(jìn)行地址復(fù)制绒疗。cloneable
深克隆:
對(duì)自己的成員變量全部復(fù)制,使用序列化進(jìn)行地址引用復(fù)制骂澄,通過(guò)輸入輸出流將地址引用的回會(huì)寫(xiě)到克隆里吓蘑。