日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

享元(Flyweight)模式

系統(tǒng) 2196 0

面向?qū)ο蠛芎玫亟鉀Q了系統(tǒng)抽象性的問(wèn)題,同時(shí)在大多數(shù)情況下,也不會(huì)損及系統(tǒng)的性能。但是,在某些特殊的應(yīng)用中下,由于對(duì)象的數(shù)量太大,采用面向?qū)ο髸?huì)給系統(tǒng)帶來(lái)難以承受的內(nèi)存開(kāi)銷(xiāo)。比如圖形應(yīng)用中的圖元等對(duì)象、字處理應(yīng)用中的字符對(duì)象等。
采用純粹對(duì)象方案的問(wèn)題在于大量細(xì)粒度的對(duì)象會(huì)很快充斥在系統(tǒng)中,從而帶來(lái)很高的運(yùn)行時(shí)代價(jià)——主要指內(nèi)存需求方面的代價(jià)。如何在避免大量細(xì)粒度對(duì)象問(wèn)題的同時(shí),讓外部客戶(hù)程序仍然能夠透明地使用面向?qū)ο蟮姆绞絹?lái)進(jìn)行操作?
運(yùn)用共享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。

一,結(jié)構(gòu):

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

抽象享元(Flyweight)角色: 此角色是所有的具體享元類(lèi)的超類(lèi),為這些類(lèi)規(guī)定出需要實(shí)現(xiàn)的公共接口。那些需要外蘊(yùn)狀態(tài)(External State)的操作可以通過(guò)調(diào)用商業(yè)方法以參數(shù)形式傳入。

具體享元(ConcreteFlyweight)角色: 實(shí)現(xiàn)抽象享元角色所規(guī)定的接口。如果有內(nèi)蘊(yùn)狀態(tài)的話(huà),必須負(fù)責(zé)為內(nèi)蘊(yùn)狀態(tài)提供存儲(chǔ)空間。享元對(duì)象的內(nèi)蘊(yùn)狀態(tài)必須與對(duì)象所處的周?chē)h(huán)境無(wú)關(guān),從而使得享元對(duì)象可以在系統(tǒng)內(nèi)共享的。

享元工廠(FlyweightFactory)角色: 本角色負(fù)責(zé)創(chuàng)建和管理享元角色。本角色必須保證享元對(duì)象可以被系統(tǒng)適當(dāng)?shù)毓蚕怼.?dāng)一個(gè)客戶(hù)端對(duì)象調(diào)用一個(gè)享元對(duì)象的時(shí)候,享元工廠角色會(huì)檢查系統(tǒng)中是否已經(jīng)有一個(gè)復(fù)合要求的享元對(duì)象。如果已經(jīng)有了,享元工廠角色就應(yīng)當(dāng)提供這個(gè)已有的享元對(duì)象;如果系統(tǒng)中沒(méi)有一個(gè)適當(dāng)?shù)南碓獙?duì)象的話(huà),享元工廠角色就應(yīng)當(dāng)創(chuàng)建一個(gè)合適的享元對(duì)象。

客戶(hù)端(Client)角色: 本角色需要維護(hù)一個(gè)對(duì)所有享元對(duì)象的引用。本角色需要自行存儲(chǔ)所有享元對(duì)象的外蘊(yùn)狀態(tài)。

二,示例代碼:

    import java.util.Hashtable;

/**
 * 享元工廠(FlyweightFactory)角色
 * @author Salmon
 *
 */
public class FlyweightFactory {
	private Hashtable flyweights = new Hashtable();

	public FlyweightFactory() {
		flyweights.put("X", new ConcreteFlyweight());
		flyweights.put("Y", new ConcreteFlyweight());
		flyweights.put("Z", new ConcreteFlyweight());
	}

	public Flyweight getFlyweight(String key) {
		return ((Flyweight) flyweights.get(key));
	}
}

/**
 * 抽象享元(Flyweight)角色
 * @author Salmon
 *
 */
public interface Flyweight {
	public void operation();
}

/**
 * 具體享元(ConcreteFlyweight)角色
 * @author Salmon
 *
 */
public class ConcreteFlyweight implements Flyweight {
	public void operation() {
		System.out.println("ok");
	}
}

/**
 * 客戶(hù)端(Client)角色
 * @author Salmon
 *
 */
public class Client {
	public static void main(String[] args) {
		FlyweightFactory f = new FlyweightFactory();
		Flyweight fx = f.getFlyweight("X");
		fx.operation();
		Flyweight fy = f.getFlyweight("Y");
		fy.operation();
		Flyweight fz = f.getFlyweight("Z");
		fz.operation();
	}
}
  

?

?

享元(Flyweight)模式


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 白沙| 兰西县| 沽源县| 虞城县| 康保县| 和龙市| 贵港市| 日土县| 醴陵市| 剑川县| 达孜县| 桂林市| 武乡县| 吉隆县| 扬中市| 六盘水市| 永兴县| 清苑县| 涪陵区| 涿州市| 上思县| 当雄县| 石屏县| 安平县| 章丘市| 永德县| 教育| 辽阳县| 鸡东县| 金华市| 高安市| 彝良县| 贵定县| 板桥市| 布尔津县| 苗栗市| 望江县| 平谷区| 镇巴县| 上高县| 酒泉市|