Java設(shè)計模式之原型設(shè)計示例詳解
簡單說一下(定義)
什么是原型模式:原型模式是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。用一個已經(jīng)創(chuàng)建的實例作為原型,通過復(fù)制該原型對象來創(chuàng)建一個或者多個和原型相同或者相似的新對象
舉例說明:我們都玩過打飛機的游戲,敵軍的飛機可謂是數(shù)不勝數(shù),但是如果每出一架敵機都要重新實例化的話,那么自然我們的功能很復(fù)雜。所以這個時候我們的原型模式就派上用場了,只實例化一架飛機出來,其他的照著他復(fù)制就可以啦
稍微夸一下(優(yōu)缺點)
原型模式優(yōu)點:
1.當(dāng)創(chuàng)建新的對象實例比較復(fù)雜時,使用原型模式通過一個已有實例可以提高新實例創(chuàng)建效率
2.可以動態(tài)增加或者減少產(chǎn)品類
3.原型模式提供了簡單的創(chuàng)建結(jié)構(gòu)
4.可以使用深克隆的方式保存對象的狀態(tài)
原型模式缺點:
1.對已有類進行改造時,必須修改其源碼,違背了開閉原則
2.在實現(xiàn)深克隆時需要編寫較為復(fù)雜的代碼
順便提一下(適用場景)
原型模式的適用場景:
1.對象種類繁多,無法將他們整合到一個類的時候
2.難以根據(jù)類生成實例時
3.想解耦框架與生成的實例時
著重講一下(深、淺克?。?/h2>
在原型模式中有兩個概念需要講下,就是深克隆與淺克隆。顧名思義淺克隆只是復(fù)制了基礎(chǔ)屬性(如八大基本類型),然而引用類型實際上沒有復(fù)制,只是將對應(yīng)的引用給復(fù)制了(復(fù)制地址)。
淺克?。喝绻蛯ο蟮某蓡T變量是值類型(如八大基本類型),那么就是直接復(fù)制;如果是復(fù)雜的類型,就只是復(fù)制對應(yīng)的內(nèi)存地址。(網(wǎng)上當(dāng)個圖)
換言之,就是復(fù)雜類型的成員變量(String,枚舉等)用的是一個,修改了克隆對象的原型對象也會,他們是共用的(類似于響應(yīng)式)。而值類型不是共用的。

深克?。荷羁寺【褪鞘裁炊际菃为毜?,全部復(fù)制,復(fù)制之后的全部各自獨立。修改克隆對象對于原型對象沒有任何影響(淺克隆中修改克隆對象,原型對象跟著變)。

多多用一下(結(jié)構(gòu)、代碼實現(xiàn))
模式結(jié)構(gòu)
原型模式主要包含三個部分:具體原型類、抽象原型類、訪問類
具體原型類:實現(xiàn)抽象原型類的clone()方法,是可被復(fù)制的對象
抽象原型類:規(guī)定了具體原型對象必須實現(xiàn)的接口
訪問類:使用具體原型類中的clone()方法類復(fù)制新的對象
一圖走天下:

代碼實現(xiàn)
1.創(chuàng)建具體原型類RealizeType.java
public class RealizeType implements Cloneable {
RealizeType(){
System.out.println("原型創(chuàng)建成功");
}
public Object clone() throws CloneNotSupportedException {
System.out.println("具體原型復(fù)制成功");
return super.clone();
}
}
2.原型模式測試類PrototypeTest.java
public class PrototypeTest {
public static void main(String[] args) throws CloneNotSupportedException {
RealizeType obj = new RealizeType();
RealizeType obj1 = (RealizeType) obj.clone();
System.out.println("obj==obj1?"+(obj==obj1));
}
}
3.運行結(jié)果
原型創(chuàng)建成功
具體原型復(fù)制成功
obj==obj1?false
以上就是Java設(shè)計模式之原型設(shè)計示例詳解的詳細內(nèi)容,更多關(guān)于Java原型設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解Java如何實現(xiàn)百萬數(shù)據(jù)excel導(dǎo)出功能
這篇文章主要為大家詳細介紹了Java如何實現(xiàn)百萬數(shù)據(jù)excel導(dǎo)出功能,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下2023-02-02
Java中實現(xiàn)文件預(yù)覽的功能(實例代碼)
大家都知道word,Excel,PPT實現(xiàn)在線預(yù)覽常用的方式就是先轉(zhuǎn)換成pdf,然后在進行預(yù)覽,下面給大家介紹Java中如何實現(xiàn)文件預(yù)覽的功能,需要的朋友可以參考下2023-05-05
MyBatis實現(xiàn)多表聯(lián)合查詢resultType的返回值
這篇文章主要介紹了MyBatis多表聯(lián)合查詢resultType的返回值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

