最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式之原型設(shè)計(jì)示例詳解

 更新時(shí)間:2022年04月06日 17:06:12   作者:Thinkao~  
這篇文章主要為大家詳細(xì)介紹了Java的原型設(shè)計(jì)模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

簡單說一下(定義)

什么是原型模式:原型模式是用于創(chuàng)建重復(fù)的對象,同時(shí)又能保證性能。用一個(gè)已經(jīng)創(chuàng)建的實(shí)例作為原型,通過復(fù)制該原型對象來創(chuàng)建一個(gè)或者多個(gè)和原型相同或者相似的新對象

舉例說明:我們都玩過打飛機(jī)的游戲,敵軍的飛機(jī)可謂是數(shù)不勝數(shù),但是如果每出一架敵機(jī)都要重新實(shí)例化的話,那么自然我們的功能很復(fù)雜。所以這個(gè)時(shí)候我們的原型模式就派上用場了,只實(shí)例化一架飛機(jī)出來,其他的照著他復(fù)制就可以啦

稍微夸一下(優(yōu)缺點(diǎn))

原型模式優(yōu)點(diǎn):

1.當(dāng)創(chuàng)建新的對象實(shí)例比較復(fù)雜時(shí),使用原型模式通過一個(gè)已有實(shí)例可以提高新實(shí)例創(chuàng)建效率
2.可以動態(tài)增加或者減少產(chǎn)品類
3.原型模式提供了簡單的創(chuàng)建結(jié)構(gòu)
4.可以使用深克隆的方式保存對象的狀態(tài)

原型模式缺點(diǎn):
1.對已有類進(jìn)行改造時(shí),必須修改其源碼,違背了開閉原則
2.在實(shí)現(xiàn)深克隆時(shí)需要編寫較為復(fù)雜的代碼

順便提一下(適用場景)

原型模式的適用場景:
1.對象種類繁多,無法將他們整合到一個(gè)類的時(shí)候
2.難以根據(jù)類生成實(shí)例時(shí)
3.想解耦框架與生成的實(shí)例時(shí)

著重講一下(深、淺克?。?/h2>

在原型模式中有兩個(gè)概念需要講下,就是深克隆與淺克隆。顧名思義淺克隆只是復(fù)制了基礎(chǔ)屬性(如八大基本類型),然而引用類型實(shí)際上沒有復(fù)制,只是將對應(yīng)的引用給復(fù)制了(復(fù)制地址)。
 

淺克?。喝绻蛯ο蟮某蓡T變量是值類型(如八大基本類型),那么就是直接復(fù)制;如果是復(fù)雜的類型,就只是復(fù)制對應(yīng)的內(nèi)存地址。(網(wǎng)上當(dāng)個(gè)圖)
換言之,就是復(fù)雜類型的成員變量(String,枚舉等)用的是一個(gè),修改了克隆對象的原型對象也會,他們是共用的(類似于響應(yīng)式)。而值類型不是共用的。

在這里插入圖片描述

深克隆:深克隆就是什么都是單獨(dú)的,全部復(fù)制,復(fù)制之后的全部各自獨(dú)立。修改克隆對象對于原型對象沒有任何影響(淺克隆中修改克隆對象,原型對象跟著變)。

在這里插入圖片描述

多多用一下(結(jié)構(gòu)、代碼實(shí)現(xiàn))

模式結(jié)構(gòu)

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

在這里插入圖片描述

代碼實(shí)現(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.運(yùn)行結(jié)果

原型創(chuàng)建成功
具體原型復(fù)制成功
obj==obj1?false

以上就是Java設(shè)計(jì)模式之原型設(shè)計(jì)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java原型設(shè)計(jì)模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring解決依賴版本不一致報(bào)錯(cuò)問題

    Spring解決依賴版本不一致報(bào)錯(cuò)問題

    許多同學(xué)經(jīng)常會遇到依賴版本不一致導(dǎo)致代碼報(bào)錯(cuò),所以這篇文章就給大家詳細(xì)介紹一下Spring解決依賴版本不一致報(bào)錯(cuò)問題,需要的朋友跟著小編一起來看看吧
    2023-07-07
  • springboot使用消息中間件

    springboot使用消息中間件

    這篇文章主要介紹了springboot使用消息中間件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 詳解Java如何實(shí)現(xiàn)百萬數(shù)據(jù)excel導(dǎo)出功能

    詳解Java如何實(shí)現(xiàn)百萬數(shù)據(jù)excel導(dǎo)出功能

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)百萬數(shù)據(jù)excel導(dǎo)出功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-02-02
  • Java實(shí)現(xiàn)序列化與反序列化的簡單示例

    Java實(shí)現(xiàn)序列化與反序列化的簡單示例

    序列化與反序列化是指Java對象與字節(jié)序列的相互轉(zhuǎn)換,一般在保存或傳輸字節(jié)序列的時(shí)候會用到,下面有兩個(gè)Java實(shí)現(xiàn)序列化與反序列化的簡單示例,不過還是先來看看序列和反序列化的具體概念:
    2016-05-05
  • Java中實(shí)現(xiàn)文件預(yù)覽的功能(實(shí)例代碼)

    Java中實(shí)現(xiàn)文件預(yù)覽的功能(實(shí)例代碼)

    大家都知道word,Excel,PPT實(shí)現(xiàn)在線預(yù)覽常用的方式就是先轉(zhuǎn)換成pdf,然后在進(jìn)行預(yù)覽,下面給大家介紹Java中如何實(shí)現(xiàn)文件預(yù)覽的功能,需要的朋友可以參考下
    2023-05-05
  • 詳解MyBatis特性之動態(tài)SQL

    詳解MyBatis特性之動態(tài)SQL

    動態(tài) SQL 是 MyBatis 的強(qiáng)大特性之一,這篇文章我們將結(jié)合動態(tài)SQL完成更加復(fù)雜的 SQL 操作,文章通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • yaml配置對象map使用示例

    yaml配置對象map使用示例

    這篇文章主要為大家介紹了yaml配置對象map使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java語言實(shí)現(xiàn)快速冪取模算法詳解

    Java語言實(shí)現(xiàn)快速冪取模算法詳解

    這篇文章主要介紹了Java語言實(shí)現(xiàn)快速冪取模算法詳解,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • MyBatis實(shí)現(xiàn)多表聯(lián)合查詢r(jià)esultType的返回值

    MyBatis實(shí)現(xiàn)多表聯(lián)合查詢r(jià)esultType的返回值

    這篇文章主要介紹了MyBatis多表聯(lián)合查詢r(jià)esultType的返回值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot實(shí)現(xiàn)API接口的完整代碼

    SpringBoot實(shí)現(xiàn)API接口的完整代碼

    這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)API接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論

大竹县| 库伦旗| 福清市| 监利县| 安塞县| 甘洛县| 新干县| 永丰县| 牙克石市| 内江市| 清远市| 古蔺县| 长治市| 盐源县| 龙岩市| 响水县| 永嘉县| 三亚市| 青川县| 育儿| 刚察县| 仁寿县| 孟津县| 太和县| 通化市| 廊坊市| 大竹县| 西城区| 北流市| 通河县| 邻水| 三穗县| 泰宁县| 新密市| 黄陵县| 新平| 会昌县| 桓台县| 威远县| 平昌县| 孟连|