国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

原型模式(Prototype Pattern)

這篇具有很好參考價(jià)值的文章主要介紹了原型模式(Prototype Pattern)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

原型模式

一、模式動(dòng)機(jī)

原型模式(Prototype Pattern)結(jié)構(gòu)較為簡單,它是一種特殊的創(chuàng)建型模式,當(dāng)需要?jiǎng)?chuàng)建大量相同或者相似對象時(shí),可以通過對一個(gè)已有對象的復(fù)制獲取更多對象。Java語言提供了較為簡單的原型模式解決方案,只需要?jiǎng)?chuàng)建一個(gè)原型對象,然后通過在類中定義的克隆方法復(fù)制自己。該模式應(yīng)用較為廣泛,可以快速生成大量的相似對象,極大提高了創(chuàng)建新實(shí)例的效率。

總結(jié)一下就是

  • 復(fù)制一個(gè)對象,從而克隆出多個(gè)與原型對象一模一樣的對象
  • 有些對象的創(chuàng)建過程較為復(fù)雜,而且需要頻繁創(chuàng)建
  • 通過給出一個(gè)原型對象來指明所要?jiǎng)?chuàng)建的對象的類型,然后用復(fù)制這個(gè)原型對象的辦法創(chuàng)建出更多同類型的對象

二、模式定義

  • 原型模式是一種對象創(chuàng)建型模式,用原型實(shí)例指定創(chuàng)建對象的種類,并且通過復(fù)制這些原型創(chuàng)建新的對象。
  • 原型模式允許通過一個(gè)原型對象創(chuàng)建一個(gè)或多個(gè)同類型的其他對象,而無須知道任何創(chuàng)建的細(xì)節(jié)

工作原理


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

原型模式(Prototype Pattern)

四、模式分析

  • 淺克隆(Shallow Clone):當(dāng)原型對象被復(fù)制時(shí),只復(fù)制它本身和其中包含的值類型的成員變量,而引用類型的成員變量并沒有復(fù)制
  • 深克隆(Deep Clone):除了對象本身被復(fù)制外,對象所包含的所有成員變量也將被復(fù)制

五、總結(jié)

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

  • 簡化對象的創(chuàng)建過程,通過復(fù)制一個(gè)已有實(shí)例可以提高新實(shí)例的創(chuàng)建效率
  • 擴(kuò)展性較好
  • 簡化創(chuàng)建結(jié)構(gòu),原型模式中產(chǎn)品的復(fù)制是通過封裝在原型類中的克隆方法實(shí)現(xiàn)的,無須專門的工廠類來創(chuàng)建產(chǎn)品
  • 可以使用深克隆的方式保存對象的狀態(tài),以便在需要的時(shí)候使用,可輔助實(shí)現(xiàn)撤銷操作

模式缺點(diǎn)

  • 需要為每一個(gè)類配備一個(gè)克隆方法,而且該克隆方法位于一個(gè)類的內(nèi)部,當(dāng)對已有的類進(jìn)行改造時(shí),需要修改源代碼,違背了開閉原則。
  • 在實(shí)現(xiàn)深克隆時(shí)需要編寫較為復(fù)雜的代碼,而且當(dāng)對象之間存在多重的嵌套引用時(shí),為了實(shí)現(xiàn)深克隆,每一層對象對應(yīng)的類都必須支持深克隆,實(shí)現(xiàn)起來可能會(huì)比較麻煩。
  • 使用情形
  • 創(chuàng)建新對象成本較大,新對象可以通過復(fù)制已有對象來獲得,如果是相似對象,則可以對其成員變量稍作修改
  • 系統(tǒng)要保存對象的狀態(tài),而對象的狀態(tài)變化很小
  • 需要避免使用分層次的工廠類來創(chuàng)建分層次的對象

擴(kuò)展

原型管理器(Prototype Manager)將多個(gè)原型對象存儲在一個(gè)集合中供客戶端使用,它是一個(gè)專門負(fù)責(zé)克隆對象的工廠,其中定義了一個(gè)集合用于存儲原型對象,如果需要某個(gè)原型對象的一個(gè)克隆,可以通過復(fù)制集合中對應(yīng)的原型對象來獲得。
原型管理器中針對抽象類型編程,以便擴(kuò)展。

原型管理器類文章來源地址http://www.zghlxwxcb.cn/news/detail-438283.html

public class PrototypeManager {
    private Hashtable prototypeTable=new Hashtable();  //Hashtable存儲原型對象
    public PrototypeManager() {
        prototypeTable.put("A", new ConcretePrototypeA());
        prototypeTable.put("B", new ConcretePrototypeB());
    }
    public void add(String key, Prototype prototype) {
        prototypeTable.put(key,prototype);
    }
    public Prototype get(String key) {
        Prototype clone = null;
        clone = ((Prototype)prototypeTable.get(key)).clone(); //克隆方法創(chuàng)建新對象
        return clone;
    }
}



到了這里,關(guān)于原型模式(Prototype Pattern)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式六:原型模式(Prototype Pattern)

    原型模式是一種創(chuàng)建對象的設(shè)計(jì)模式。它允許我們通過復(fù)制一個(gè)現(xiàn)有對象來創(chuàng)建新的對象,而無需知道其具體實(shí)現(xiàn)細(xì)節(jié)。在使用原型模式時(shí),我們首先創(chuàng)建一個(gè)原始對象,然后根據(jù)需要復(fù)制該對象,以獲得新創(chuàng)建的對象。 原型模式的主要思想是基于對象的復(fù)制。通過使用原型

    2024年02月14日
    瀏覽(24)
  • 原型模式 Prototype Pattern 《游戲編程模式》學(xué)習(xí)筆記

    原型模式 Prototype Pattern 《游戲編程模式》學(xué)習(xí)筆記

    用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。 假設(shè)我現(xiàn)在要做一款游戲,這個(gè)游戲里有許多不同種類的怪物,鬼魂,惡魔和巫師。這些怪物通過“生產(chǎn)者”進(jìn)入這片區(qū)域,每種敵人有不同的生產(chǎn)者。 假設(shè)每種怪物都有不同的類,同時(shí)他們都繼承怪

    2024年02月12日
    瀏覽(24)
  • 創(chuàng)建型設(shè)計(jì)模式:5、原型模式(Prototype Pattern)

    目錄 1、原型模式的含義 2、C++實(shí)現(xiàn)原型模式的簡單實(shí)例 1、原型模式的含義 通過復(fù)制現(xiàn)有對象來創(chuàng)建新對象,而無需依賴于顯式的構(gòu)造函數(shù)或工廠方法,同時(shí)又能保證性能。 The prototype pattern is a creational design pattern in software development. It is used when the type of objects to create is det

    2024年02月13日
    瀏覽(21)
  • 【編碼魔法師系列_構(gòu)建型4】原型模式(Prototype Pattern)

    【編碼魔法師系列_構(gòu)建型4】原型模式(Prototype Pattern)

    ??直達(dá)編碼魔法師系列其他文章?? 學(xué)會(huì)設(shè)計(jì)模式,你就可以像擁有魔法一樣,在開發(fā)過程中解決一些復(fù)雜的問題。設(shè)計(jì)模式是由經(jīng)驗(yàn)豐富的開發(fā)者們(GoF)凝聚出來的最佳實(shí)踐,可以提高代碼的可讀性、可維護(hù)性和可重用性,從而讓我們的開發(fā)效率更高。通過不斷的練習(xí)和

    2024年01月19日
    瀏覽(20)
  • 設(shè)計(jì)模式—原型模式(Prototype)

    設(shè)計(jì)模式—原型模式(Prototype)

    目錄 一、什么是原型模式? 二、原型模式具有什么優(yōu)缺點(diǎn)嗎? 三、有什么缺點(diǎn)? 四、什么時(shí)候用原型模式? 五、代碼展示 ①、簡歷代碼初步實(shí)現(xiàn) ②、原型模式 ③、簡歷的原型實(shí)現(xiàn) ④、深復(fù)制 ⑤、淺復(fù)制 用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的

    2024年02月11日
    瀏覽(19)
  • 【設(shè)計(jì)模式】4、prototype 原型模式

    https://refactoringguru.cn/design-patterns/prototype 如果希望 復(fù)制對象, 可使用 “prototype 模式” 如果 “待復(fù)制的對象” 是 interface 而不是 class, 或者如果 class 有 private 變量時(shí). 無法知道 \\\"待復(fù)制的對象\\\"的細(xì)節(jié), 則需要其實(shí)現(xiàn) “clone()” 方法供外部調(diào)用. 本例希望實(shí)現(xiàn)文件系統(tǒng)的復(fù)制功能

    2024年04月15日
    瀏覽(37)
  • 5 原型模式 Prototype

    5 原型模式 Prototype

    指原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象 當(dāng)代碼不應(yīng)該依賴于需要復(fù)制的對象的具體類時(shí),請使用Prototype模式。 Spring源碼中的應(yīng)用 ? 1.可以不耦合具體類的情況下克隆對象 2.避免重復(fù)的初始化代碼 3.更方便的構(gòu)建復(fù)雜對象

    2024年02月22日
    瀏覽(14)
  • 原型模式(Prototype)

    原型模式(Prototype)

    原型模式是一種創(chuàng)建型設(shè)計(jì)模式,使調(diào)用方能夠復(fù)制已有對象,而又無需使代碼依賴它們所屬的類。當(dāng)有一個(gè)類的實(shí)例(原型),并且想通過復(fù)制原型來創(chuàng)建新對象時(shí),通常會(huì)使用原型模式。 原型模式包含如下角色: Prototype,原型類,用來聲明克隆方法。在絕大多數(shù)情況下

    2024年02月14日
    瀏覽(21)
  • 設(shè)計(jì)模式之原型模式Prototype的C++實(shí)現(xiàn)

    設(shè)計(jì)模式之原型模式Prototype的C++實(shí)現(xiàn)

    1、原型模式提出 在軟件功能設(shè)計(jì)中,經(jīng)常面臨著“某些結(jié)構(gòu)復(fù)雜的對象”的創(chuàng)建工作,且創(chuàng)建的對象想擁有其他對象在某一刻的狀態(tài),則可以使用原型模型。原型模型是通過拷貝構(gòu)造函數(shù)來創(chuàng)建對象,并且該對象擁有其他對象在某一刻的狀態(tài)。 2、需求描述 設(shè)計(jì)產(chǎn)品A,B,這

    2024年02月12日
    瀏覽(21)
  • 《Java極簡設(shè)計(jì)模式》第05章:原型模式(Prototype)

    《Java極簡設(shè)計(jì)模式》第05章:原型模式(Prototype)

    作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章匯總:https://binghe.gitcode.host/md/all/all.html 源碼地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-prototype 沉淀,成長,突破,幫助他人,成就自我。 本章難度:★★☆☆☆ 本章重點(diǎn):用

    2024年02月11日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包