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

一、概念

主要用于減少創(chuàng)建對(duì)象的數(shù)量,以減少內(nèi)存占用和提高性能。

1.1、定義

運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度對(duì)象的復(fù)用。往往需要結(jié)合工廠類進(jìn)行共享對(duì)象的管理。


Flyweight.png
1.2、解決的問題
  • 問題分析:實(shí)際中,有時(shí)候存在大量對(duì)象,這些對(duì)象有些部分是相同(或一些不同部分),如果每次創(chuàng)建的話,有可能會(huì)造成內(nèi)存溢出,創(chuàng)建和銷毀也會(huì)影響性能。

  • 模式的解決思路:通過分析,將共同和不同的部分剝離抽象出來。當(dāng)有相同的業(yè)務(wù)請(qǐng)求,直接返回在內(nèi)存中已有的對(duì)象,避免重新創(chuàng)建,沒有才創(chuàng)建新勢(shì)力。模式采用一個(gè)「共享對(duì)象」來避免大量擁有相同內(nèi)容對(duì)象的開銷。

1.3、種類:
  • 單純共享享元模式
  • 不共享的享元模式
  • 組合享元模式

二、模式的應(yīng)用和優(yōu)缺點(diǎn)

2.1、應(yīng)用場(chǎng)景
  • 實(shí)例:
    Android或者iOS中的 String,如果有則返回,如果沒有則創(chuàng)建一個(gè)字符串保存在字符串緩存池里面。
    數(shù)據(jù)庫(kù)的數(shù)據(jù)池。
    系統(tǒng)有大量相似對(duì)象,如圖片存儲(chǔ)
    需要緩沖池的場(chǎng)景,如線程池、內(nèi)存池等
2.2、優(yōu)缺點(diǎn)
  • 優(yōu)點(diǎn):
    大大減少對(duì)象的創(chuàng)建,降低系統(tǒng)的內(nèi)存,使效率提高。
  • 缺點(diǎn):
    增加系統(tǒng)的復(fù)雜程度、共享對(duì)象數(shù)據(jù)的更新和同步麻煩。

三、思而后行

  • 注意事項(xiàng):
    1、注意劃分外部狀態(tài)和內(nèi)部狀態(tài),否則可能會(huì)引起線程安全問題。
    2、這些類必須有一個(gè)工廠對(duì)象加以控制。
    3、共享對(duì)象的共同數(shù)據(jù)的剝離,需要加以考慮,選擇不經(jīng)常變動(dòng)的字段共享
    4、共享對(duì)象的數(shù)據(jù)更新和同步問題。
    5、如何生成和使用唯一標(biāo)識(shí)碼來標(biāo)識(shí)的對(duì)象,以方便進(jìn)行管理。

實(shí)現(xiàn)對(duì)象的復(fù)用——享元模式(五):?jiǎn)渭儭?fù)合享元模式,享元模式總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容