欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

簡(jiǎn)單說一下(定義)

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

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

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

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

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

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

順便提一下(適用場(chǎng)景)

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

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

在這里插入圖片描述

代碼實(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.原型模式測(cè)試類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ì)模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot實(shí)現(xiàn)打印彩色日志

    springboot實(shí)現(xiàn)打印彩色日志

    這篇文章主要介紹了springboot實(shí)現(xiàn)打印彩色日志的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解決Spring中@Value注解取值為null問題

    解決Spring中@Value注解取值為null問題

    近期應(yīng)用中因業(yè)務(wù)迭代需要接入 user 客戶端,接入后總是啟動(dòng)失敗,報(bào)注冊(cè) user bean 依賴的配置屬性為 null,所以接下來小編就和大家一起排查分析這個(gè)問題,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • Java中泛型的使用和優(yōu)點(diǎn)解析

    Java中泛型的使用和優(yōu)點(diǎn)解析

    這篇文章主要介紹了Java中泛型的使用和優(yōu)點(diǎn)解析,泛型使用過程中,操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法,需要的朋友可以參考下
    2023-09-09
  • 多線程死鎖的產(chǎn)生以及如何避免死鎖方法(詳解)

    多線程死鎖的產(chǎn)生以及如何避免死鎖方法(詳解)

    下面小編就為大家?guī)硪黄嗑€程死鎖的產(chǎn)生以及如何避免死鎖方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java實(shí)戰(zhàn)之在線租房系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之在線租房系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了利用Java實(shí)現(xiàn)的在線租房系統(tǒng),文中用到了SpringBoot、Redis、MySQL、Vue等技術(shù),文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • 解決lombok 父類和子類builder不兼容的問題

    解決lombok 父類和子類builder不兼容的問題

    這篇文章主要介紹了解決lombok 父類和子類builder不兼容的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java中的HashMap和Hashtable區(qū)別解析

    Java中的HashMap和Hashtable區(qū)別解析

    這篇文章主要介紹了Java中的HashMap和Hashtable區(qū)別解析,HashMap和Hashtable都實(shí)現(xiàn)了Map接口,但決定用哪一個(gè)之前先要弄清楚它們之間的區(qū)別,主要的區(qū)別有線程安全性、同步和速度,需要的朋友可以參考下
    2023-11-11
  • Spring Boot與Kotlin處理Web表單提交的方法

    Spring Boot與Kotlin處理Web表單提交的方法

    本篇文章主要介紹了Spring Boot 與 Kotlin 處理Web表單提交的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 微服務(wù)下springboot?多模塊打包使用詳解

    微服務(wù)下springboot?多模塊打包使用詳解

    這篇文章主要介紹了springboot多模塊打包使用詳解,牽涉到很多與maven相關(guān)的技術(shù)點(diǎn),比如maven的版本管理,依賴傳遞,父子模塊繼承,以及maven打包插件等眾多的內(nèi)容相互交織在一起,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • 實(shí)例詳解MyBatis-plus自動(dòng)填充功能

    實(shí)例詳解MyBatis-plus自動(dòng)填充功能

    每次對(duì)數(shù)據(jù)進(jìn)行新增、刪除、修改時(shí)都需要對(duì)這些字段進(jìn)行設(shè)置,雖然新增時(shí)間和修改時(shí)間可以使用數(shù)據(jù)庫(kù)的時(shí)間,但是新增人和修改人就不能使用這樣的功能,下面小編給大家介紹下MyBatis-plus自動(dòng)填充功能的實(shí)例代碼,感興趣的朋友一起看看吧
    2022-01-01

最新評(píng)論