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

設(shè)計(jì)模式:享元模式

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

設(shè)計(jì)模式:享元模式

設(shè)計(jì)模式:享元模式,通工-數(shù)據(jù)結(jié)構(gòu)與算法C,Kotlin學(xué)習(xí)筆記,設(shè)計(jì)模式,享元模式

什么是享元模式

首先我們需要簡單了解一下什么是享元模式。享元模式(Flyweight Pattern):主要用于減少創(chuàng)建對象的數(shù)量,以減少內(nèi)存占用和提高性能。享元模式的重點(diǎn)就在這個(gè)享字,通過一些共享技術(shù)來減少對象的創(chuàng)建,實(shí)際上Java中String值的存儲,Volley中的ByteArrayPool也使用到了享元模式,這對提高性能很有用。

感覺目前大部分的緩存機(jī)制都會用到享元模式。

享元模式結(jié)構(gòu)圖

享元模式在一般情況下可以分成四個(gè)部分,也可以大體分為兩部分,分別是享元工廠類,享元(抽象)類。如果學(xué)習(xí)過池有關(guān)的概念的話,我們就可以把享元工廠類看做是一個(gè)池(Pool),享元類看做是池中的數(shù)據(jù)。

標(biāo)準(zhǔn)享元模式的結(jié)構(gòu)圖:
設(shè)計(jì)模式:享元模式,通工-數(shù)據(jù)結(jié)構(gòu)與算法C,Kotlin學(xué)習(xí)筆記,設(shè)計(jì)模式,享元模式

可以看到除了共享的享元類之外還有一類不參與共享的享元類,因?yàn)橄碓J街皇鞘构蚕沓蔀榭赡芏粡?qiáng)制共享。

享元模式工作的一般流程

享元模式工作的流程和緩存機(jī)制很像(或許應(yīng)該說緩存機(jī)制和它很像嗎),當(dāng)我們需要獲取一個(gè)享元對象時(shí)享元工廠會檢查其存儲空間中是否已經(jīng)有所需要的享元實(shí)例,如果有就將它直接返回,如果沒有就創(chuàng)建一個(gè)并加入到享元工廠的存儲空間中去。

享元模式的簡單實(shí)現(xiàn)(Kotlin)

首先我們直接定義一個(gè)享元類:

class flyweight(val id:Int) {
    var message = "empty body"

    fun execute(){
        println(message)
    }
}

這里我們就不定義接口什么的了,直接創(chuàng)建一個(gè)簡單的例子。這是一個(gè)享元類,它有兩個(gè)參數(shù),分別是id和message。id值是每個(gè)享元類唯一確定的一個(gè)值,相當(dāng)于數(shù)據(jù)庫中的主鍵,我們想要通過這個(gè)值來判斷這個(gè)享元類是否是我們想要的實(shí)例。message對象和享元類的具體執(zhí)行有關(guān)。

接著我們定義一個(gè)工廠類:

class flyweightFactory{

    val Pool = HashMap<Int,flyweight>()

    fun getFlyweight(id: Int,msg:String):flyweight{
        if (!Pool.containsKey(id)){ //如果沒有找到對應(yīng)的實(shí)例就新創(chuàng)建一個(gè)
            val newInstance = flyweight(id)
            Pool.put(id,newInstance)
        }
        return Pool.get(id)?.apply {
            message = msg
        }!!
    }

}

這個(gè)類的邏輯很簡單,它內(nèi)部有一個(gè)Pool變量來存儲享元對象。還有一個(gè)getFlyweight方法用于獲取它內(nèi)部管理的享元對象,該方法有兩個(gè)參數(shù),第一個(gè)參數(shù)即為我們想要獲得的享元實(shí)例的id,這是用于判斷我們想要的享元實(shí)例是否存在,第二個(gè)參數(shù)將會被賦予給最后返回的享元對象的message中,用來影響享元對象的execute方法的執(zhí)行結(jié)果。

內(nèi)部狀態(tài)和外部狀態(tài)

內(nèi)部狀態(tài)和外部狀態(tài)的概念干講比較抽象,所以我們給完上面的簡單例子之后結(jié)合來講。首先我們聯(lián)系享元模式的使用場景,其中之一就是擁有眾多重復(fù)內(nèi)容的對象,比如說一個(gè)ppt模板,對于ppt來說可能大部分的結(jié)構(gòu)都是一致的,不變的只有上面顯示的文字。這種情況下如果把ppt抽象成一個(gè)類的話,我們就可以共享它的模板,這個(gè)模板屬于這個(gè)類內(nèi)部的,我們稱之為內(nèi)部狀態(tài),一般內(nèi)部狀態(tài)是不會被外部調(diào)用給更改的。而ppt需要顯示的文字就屬于是外部狀態(tài),它取決于外部調(diào)用傳入的參數(shù)。

我們可以對照上面的例子,其中顯然flyweight類的id參數(shù)為內(nèi)部參數(shù),因?yàn)樗坏┬纬墒遣浑S外部傳入的參數(shù)而改變的,這也可以看做是我們共享的東西。再抽象一點(diǎn),這個(gè)execute方法也是內(nèi)部狀態(tài),因?yàn)樗倪壿嬕膊浑S外部參數(shù)而改變。而其中哪個(gè)message參數(shù)就是外部狀態(tài),因?yàn)樗看味紩S著外部傳入的參數(shù)而改變。文章來源地址http://www.zghlxwxcb.cn/news/detail-712569.html

到了這里,關(guān)于設(shè)計(jì)模式:享元模式的文章就介紹完了。如果您還想了解更多內(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ì)模式~~~結(jié)構(gòu)型模式~~~享元模式(Java)

    【十】設(shè)計(jì)模式~~~結(jié)構(gòu)型模式~~~享元模式(Java)

    【學(xué)習(xí)難度:★★★★☆,使用頻率:★☆☆☆☆】 ????????面向?qū)ο蠹夹g(shù)可以很好地解決一些靈活性或可擴(kuò)展性問題,但在很多情況下需要在系統(tǒng)中增加類和對象的個(gè)數(shù)。當(dāng)對象數(shù)量太多時(shí),將導(dǎo)致運(yùn)行代價(jià)過高,帶來性能下降等問題。 享元模式正是為解決這一類問題

    2024年02月08日
    瀏覽(25)
  • [設(shè)計(jì)模式 Go實(shí)現(xiàn)] 結(jié)構(gòu)型~享元模式

    享元模式從對象中剝離出不發(fā)生改變且多個(gè)實(shí)例需要的重復(fù)數(shù)據(jù),獨(dú)立出一個(gè)享元,使多個(gè)對象共享,從而節(jié)省內(nèi)存以及減少對象數(shù)量。 flyweight.go flyweight_test.go

    2024年01月16日
    瀏覽(30)
  • 設(shè)計(jì)模式(十二):結(jié)構(gòu)型之享元模式

    設(shè)計(jì)模式(十二):結(jié)構(gòu)型之享元模式

    設(shè)計(jì)模式系列文章 設(shè)計(jì)模式(一):創(chuàng)建型之單例模式 設(shè)計(jì)模式(二、三):創(chuàng)建型之工廠方法和抽象工廠模式 設(shè)計(jì)模式(四):創(chuàng)建型之原型模式 設(shè)計(jì)模式(五):創(chuàng)建型之建造者模式 設(shè)計(jì)模式(六):結(jié)構(gòu)型之代理模式 設(shè)計(jì)模式(七):結(jié)構(gòu)型之適配器模式 設(shè)計(jì)模式(八):結(jié)構(gòu)型之裝

    2024年02月08日
    瀏覽(24)
  • 【設(shè)計(jì)模式】第13節(jié):結(jié)構(gòu)型模式之“享元模式”

    【設(shè)計(jì)模式】第13節(jié):結(jié)構(gòu)型模式之“享元模式”

    所謂“享元”,顧名思義就是被共享的單元。享元模式的意圖是復(fù)用對象,節(jié)省內(nèi)存,前提是享元對象是不可變對象。 實(shí)現(xiàn):通過工廠模式,在工廠類中,通過一個(gè)Map或者List來緩存已經(jīng)創(chuàng)建好的享元對象,以達(dá)到復(fù)用的目的。把實(shí)例的共享狀態(tài)和不共享狀態(tài)分開。 以下是畫

    2024年02月08日
    瀏覽(16)
  • 【Java 設(shè)計(jì)模式】結(jié)構(gòu)型之享元模式

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它旨在減少對象的數(shù)量以節(jié)省內(nèi)存和提高性能。享元模式通過共享大量相似對象的狀態(tài),使得這些對象可以共享,而不需要在每個(gè)對象中都存儲相同的數(shù)據(jù)。在本文中,我們將深入研究Java中享元模式的定義、結(jié)構(gòu)、使用場景

    2024年01月22日
    瀏覽(30)
  • Java設(shè)計(jì)模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之結(jié)構(gòu)型-享元模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計(jì) 四、案例分析 4.1、基本實(shí)現(xiàn) 4.2、游戲角色 五、總結(jié) 享元模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,主要用于減少創(chuàng)建大量相似對象所占用的內(nèi)存,它通過共享技術(shù)來有效支持大量細(xì)粒度的對象。 角色 描述 抽象享元角色 定義出對象的外部狀

    2024年02月16日
    瀏覽(26)
  • 設(shè)計(jì)模式⑥ :訪問數(shù)據(jù)結(jié)構(gòu)

    設(shè)計(jì)模式⑥ :訪問數(shù)據(jù)結(jié)構(gòu)

    有時(shí)候不想動腦子,就懶得看源碼又不像浪費(fèi)時(shí)間所以會看看書,但是又記不住,所以決定開始寫\\\"抄書\\\"系列。本系列大部分內(nèi)容都是來源于《 圖解設(shè)計(jì)模式》(【日】結(jié)城浩 著)。該系列文章可隨意轉(zhuǎn)載。 Visitor 模式:訪問數(shù)據(jù)結(jié)構(gòu)并處理數(shù)據(jù) 在 Visitor 模式中,數(shù)據(jù)結(jié)構(gòu)

    2024年01月16日
    瀏覽(17)
  • 【Java面試題】設(shè)計(jì)模式之七種結(jié)構(gòu)性模式——代理模式、適配器模式、橋接模式、裝飾模式、外觀模式、享元模式、組合模式

    目錄 一、代理模式 二、適配器模式 三、橋接模式 四、裝飾模式 五、外觀模式 六、享元模式 七、組合模式 概念: 代理模式是為其他對象提供一種以代理控制對這個(gè)對象的訪問。在某些情況下,一個(gè)對象不適合或者不能直接引用另一個(gè)對象,而代理對象可以在客戶端和目標(biāo)對

    2023年04月09日
    瀏覽(26)
  • 設(shè)計(jì)模式-享元模式

    享元模式(Flyweight Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,主要用于減少創(chuàng)建大量相似對象對內(nèi)存資源的消耗,通過共享這些對象來提高程序性能和系統(tǒng)資源利用率。在實(shí)際應(yīng)用場景中string就是使用了享元模式,string a = “123”; string b = “123”; 我們假設(shè)有一個(gè)場景是需要創(chuàng)建大量的

    2024年01月24日
    瀏覽(22)
  • 設(shè)計(jì)模式——享元模式

    設(shè)計(jì)模式——享元模式

    享元模式(Flyweight Pattern)是池技術(shù)的重要實(shí)現(xiàn)方式。 使用共享對象可以有效地支持大量的細(xì)粒度對象。 優(yōu)點(diǎn) 可以大大減少應(yīng)用程序創(chuàng)建對象的數(shù)量,降低程序內(nèi)存占用。 缺點(diǎn) 提高了系統(tǒng)的復(fù)雜度,需要分離出享元對象的外部狀態(tài)(key)和內(nèi)部狀態(tài)(對象屬性),并且外部

    2024年02月16日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包