好程序員分享 java設(shè)計(jì)模式之享元模式,享元模式有點(diǎn)類似于單例模式,都是只生成一個(gè)對(duì)象被共享使用。享元模式主要目的就是讓多個(gè)對(duì)象實(shí)現(xiàn)共享,減少不必要的內(nèi)存消耗,將多對(duì)同一對(duì)象的訪問(wèn)集中起來(lái),不必為每個(gè)訪問(wèn)者創(chuàng)建一個(gè)單獨(dú)的對(duì)象,以此來(lái)降低內(nèi)存的消耗。
成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶提供服務(wù)是我們的理念。成都創(chuàng)新互聯(lián)把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開(kāi)發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!
在享元模式結(jié)構(gòu)中包含如下幾個(gè)角色:
Flyweight(抽象享元類):通常是一個(gè)接口或抽象類,在抽象享元類中聲明了具體享元類公共的方法,這些方法可以向外界提供享元對(duì)象的內(nèi)部數(shù)據(jù)(內(nèi)部狀態(tài)),同時(shí)也可以通過(guò)這些方法來(lái)設(shè)置外部數(shù)據(jù)(外部狀態(tài))。
ConcreteFlyweight(具體享元類):它實(shí)現(xiàn)了抽象享元類,其實(shí)例稱為享元對(duì)象;在具體享元類中為內(nèi)部狀態(tài)提供了存儲(chǔ)空間。通常我們可以結(jié)合單例模式來(lái)設(shè)計(jì)具體享元類,為每一個(gè)具體享元類提供唯一的享元對(duì)象。
UnsharedConcreteFlyweight(非共享具體享元類):并不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設(shè)計(jì)為非共享具體享元類;當(dāng)需要一個(gè)非共享具體享元類的對(duì)象時(shí)可以直接通過(guò)實(shí)例化創(chuàng)建。
FlyweightFactory(享元工廠類):享元工廠類用于創(chuàng)建并管理享元對(duì)象,它針對(duì)抽象享元類編程,將各種類型的具體享元對(duì)象存儲(chǔ)在一個(gè)享元池中,享元池一般設(shè)計(jì)為一個(gè)存儲(chǔ)“鍵值對(duì)”的集合(也可以是其他類型的集合),可以結(jié)合工廠模式進(jìn)行設(shè)計(jì);當(dāng)用戶請(qǐng)求一個(gè)具體享元對(duì)象時(shí),享元工廠提供一個(gè)存儲(chǔ)在享元池中已創(chuàng)建的實(shí)例或者創(chuàng)建一個(gè)新的實(shí)例(如果不存在的話),返回新創(chuàng)建的實(shí)例并將其存儲(chǔ)在享元池中。
2、享元模式的實(shí)現(xiàn)
在享元模式中引入了享元工廠類,享元工廠類的作用在于提供一個(gè)用于存儲(chǔ)享元對(duì)象的享元池,當(dāng)用戶需要對(duì)象時(shí),首先從享元池中獲取,如果享元池中不存在,則創(chuàng)建一個(gè)新的享元對(duì)象返回給用戶,并在享元池中保存該新增對(duì)象。接下來(lái),實(shí)現(xiàn)一個(gè)登陸的享元模式。
3、享元模式的優(yōu)缺點(diǎn)
享元模式優(yōu)點(diǎn) ,在于外部狀態(tài)相對(duì)獨(dú)立,使得對(duì)象可以在不同的環(huán)境中被復(fù)用(共享對(duì)象可以適應(yīng)不同的外部環(huán)境)。且享元模式可共享相同或相似的細(xì)粒度對(duì)象,從而減少了內(nèi)存消耗,同時(shí)降低了對(duì)象創(chuàng)建與垃圾回收的開(kāi)銷。
享元模式缺點(diǎn),外部狀態(tài)由客戶端保存,共享對(duì)象讀取外部狀態(tài)的開(kāi)銷可能比較大。享元模式要求將內(nèi)部狀態(tài)與外部狀態(tài)分離,這使得程序的邏輯復(fù)雜化,同時(shí)也增加了狀態(tài)維護(hù)成本。
分享標(biāo)題:好程序員分享java設(shè)計(jì)模式之享元模式
當(dāng)前路徑:http://www.ekvhdxd.cn/article22/iecpcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、App開(kāi)發(fā)、虛擬主機(jī)、品牌網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)