享元模式

一. 概念

定義:Use sharing to support large numbers of fine-grained objects efficiently.使用共享的方式避免創(chuàng)建銷毀大量對(duì)象資源的開銷。

意圖:運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。

主要解決:在有大量對(duì)象時(shí),有可能會(huì)造成內(nèi)存溢出,我們把其中共同的部分抽象出來(lái),如果有相同的業(yè)務(wù)請(qǐng)求,直接返回在內(nèi)存中已有的對(duì)象,避免重新創(chuàng)建。

何時(shí)使用: 1、系統(tǒng)中有大量對(duì)象。 2、這些對(duì)象消耗大量?jī)?nèi)存。 3、這些對(duì)象的狀態(tài)大部分可以外部化。 4、這些對(duì)象可以按照內(nèi)蘊(yùn)狀態(tài)分為很多組,當(dāng)把外蘊(yùn)對(duì)象從對(duì)象中剔除出來(lái)時(shí),每一組對(duì)象都可以用一個(gè)對(duì)象來(lái)代替。 5、系統(tǒng)不依賴于這些對(duì)象身份,這些對(duì)象是不可分辨的。

如何解決:用唯一標(biāo)識(shí)碼判斷,如果在內(nèi)存中有,則返回這個(gè)唯一標(biāo)識(shí)碼所標(biāo)識(shí)的對(duì)象。

關(guān)鍵代碼:用 HashMap 存儲(chǔ)這些對(duì)象。

應(yīng)用實(shí)例: 1、JAVA 中的 String,如果有則返回,如果沒(méi)有則創(chuàng)建一個(gè)字符串保存在字符串緩存池里面。 2、數(shù)據(jù)庫(kù)的數(shù)據(jù)池。

優(yōu)點(diǎn):大大減少對(duì)象的創(chuàng)建,降低系統(tǒng)的內(nèi)存,使效率提高。

缺點(diǎn):提高了系統(tǒng)的復(fù)雜度,需要分離出外部狀態(tài)和內(nèi)部狀態(tài),而且外部狀態(tài)具有固有化的性質(zhì),不應(yīng)該隨著內(nèi)部狀態(tài)的變化而變化,否則會(huì)造成系統(tǒng)的混亂。

使用場(chǎng)景: 1、系統(tǒng)有大量相似對(duì)象。 2、需要緩沖池的場(chǎng)景。

注意事項(xiàng): 1、注意劃分外部狀態(tài)和內(nèi)部狀態(tài),否則可能會(huì)引起線程安全問(wèn)題。 2、這些類必須有一個(gè)工廠對(duì)象加以控制。

二. 場(chǎng)景

三. 代碼

偽代碼:關(guān)鍵的三個(gè)類,抽象父親類,子類,共享工廠。
抽象父親類
{
抽象方法
}
具體子類
{
實(shí)現(xiàn)抽象方法
}
共享工廠類
{
共享池
對(duì)象生產(chǎn)方法
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 場(chǎng)景問(wèn)題# 1.1 加入權(quán)限控制## 考慮這樣一個(gè)問(wèn)題,給系統(tǒng)加入權(quán)限控制,這基本上是所有的應(yīng)用系統(tǒng)都有的功能...
    七寸知架構(gòu)閱讀 2,515評(píng)論 1 57
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是享元模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 單純享元模式和復(fù)合享元模式 模式擴(kuò)展...
    w1992wishes閱讀 1,477評(píng)論 0 6
  • 例子應(yīng)用: 比如說(shuō)一個(gè)文本系統(tǒng),每個(gè)字母定一個(gè)對(duì)象,那么大小寫字母一共就是52個(gè),那么就要定義52個(gè)對(duì)象。如果有一...
    Arya鑫閱讀 189評(píng)論 0 0
  • 享元模式 享元模式(Flyweight Pattern)主要用于減少創(chuàng)建對(duì)象的數(shù)量,以減少內(nèi)存占用和提高性能。這種...
    ZackDt閱讀 413評(píng)論 0 1
  • 不知道為什么,昨天晚上下雪的時(shí)候很開心很開心,然而,開心過(guò)后,也有一點(diǎn)小小的傷感,因?yàn)橹霸S下一個(gè)愿望:希...
    愛(ài)笑的小奶狗閱讀 176評(píng)論 0 1