国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

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

2019-11-06 09:55:18
字體:
供稿:網(wǎng)友

享元模式里面的享則共享的意思,很明顯就是共享資源,作用也就很明顯運用共享技術(shù)有效地支持大量細(xì)粒度的對象。如果有很多歌完全相同或相似的對象,我們就可以通過共享模式來節(jié)省內(nèi)存。 享元對象能做到的共享的關(guān)鍵是區(qū)分了內(nèi)部狀態(tài)和外部狀態(tài)。內(nèi)部狀態(tài):可以共享,不會隨環(huán)境變化而改變。外部狀態(tài):不可以共享,會隨環(huán)境變化而改變。共享單車想必大家都很熟悉吧。共享單車其實也是享元模式的體現(xiàn)。單車的顏色,形狀,大小,重量這些是可以共享的就稱之為內(nèi)部狀態(tài),因為這些特征是它們所共有的,不會隨環(huán)境變化而改變。而單車被擺放的位置是不可以共享的則是外部狀態(tài)。 享元模式的參與者有 1.抽象享元角色:給出一個抽象接口,以規(guī)定出所有具體享元角色需要實現(xiàn)的方法。 2.具體享元角色:實現(xiàn)抽象享元角色所規(guī)定出的接口。如果有內(nèi)蘊狀態(tài)的話,必須負(fù)責(zé)為內(nèi)蘊狀態(tài)提供存儲空間。 3.非具體享元角色:并非所有的抽象享元角色子類都需要被共享。抽象享元角色接口使共享成為可能,但它并不強制共享。 4.享元工廠角色:確保合理地共享抽象享元角色。當(dāng)用戶請求一個抽象享元角色時,如果已經(jīng)有了,享元工廠角色就應(yīng)當(dāng)提供這個已有的享元對象;如果系統(tǒng)中沒有一個適當(dāng)?shù)南碓獙ο蟮脑挘碓S角色就應(yīng)當(dāng)創(chuàng)建一個合適的享元對象。 享元模式的優(yōu)點: 1.減少內(nèi)存中對象的數(shù)量 2.相同或相似的對象在內(nèi)存中只存在一份,節(jié)約資源,提高性能。 3.外部狀態(tài)相對獨立,不影響內(nèi)部狀態(tài) 缺點: 1.模式比較復(fù)雜,使應(yīng)用程序的邏輯變得復(fù)雜化 2.為了節(jié)省內(nèi)存,共享內(nèi)部狀態(tài),分理處外部狀態(tài),而讀取外部狀態(tài)使得運行時間變長,犧牲時間換取空間。 抽象享元角色和具體享元角色類

/** * 抽象享元角色 */public interface Bicycle { String color(String color); String shape(); String size(); String weight(); String parkingPosition(ParkingPosition pg); }/** * 內(nèi)部狀態(tài) * 具體享元角色 */class ConcreteBicycle implements Bicycle{PRivate String color; public ConcreteBicycle(String color) { super(); this.color = color;} @Override public String color(String color) { return color; } @Override public String shape() { return "單車的樣式"; } @Override public String size() { return "單車的大小"; } @Override public String weight() { return "單車的重量"; } @Override public String parkingPosition(ParkingPosition pg) { System.out.println("單車顏色為--->"+color); return "停放位置為--->"+pg.getName(); }}

非具體享元角色類

/** * 外部狀態(tài) * 非具體享元角色 */public class ParkingPosition {private String name;public ParkingPosition(String name) { super(); this.name = name;}public String getName() { return name;}public void setName(String name) { this.name = name;}}

享元工廠角色類

/** *享元工廠角色 */public class BicycleFactory {private static Map<String,Bicycle>bicycleMap = new HashMap<String,Bicycle>();public static Bicycle getBicycle(String color){ if (bicycleMap.get(color)!=null) { return bicycleMap.get(color); }else { Bicycle bicycle = new ConcreteBicycle(color); bicycleMap.put(color, bicycle); return bicycle; }}}

測試代碼

Bicycle bicycle1 = BicycleFactory.getBicycle("黃色");Bicycle bicycle2 = BicycleFactory.getBicycle("黃色");System.out.println("bicycle1--->"+bicycle1);System.out.println("bicycle2--->"+bicycle2);System.out.println(bicycle1.parkingPosition(new ParkingPosition("昌平區(qū)")));System.out.println(bicycle2.parkingPosition(new ParkingPosition("朝陽區(qū)")));

運行效果截圖 這里寫圖片描述 通過運行效果我們可以看到bicycle1 和bicycle2 是同一個對象。到這里享元模式也就結(jié)束了。整個結(jié)構(gòu)型模式也就介紹完了,后期將會繼續(xù)介紹行為模式。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 游戏| 靖州| 罗定市| 华池县| 云浮市| 横山县| 靖宇县| 神木县| 贡嘎县| 丰都县| 田阳县| 大邑县| 深泽县| 河曲县| 上林县| 嵩明县| 施秉县| 达日县| 紫金县| 中西区| 巴楚县| 临城县| 柳林县| 湟源县| 呼图壁县| 香格里拉县| 图们市| 宁德市| 马龙县| 平泉县| 博爱县| 五家渠市| 洪洞县| 元阳县| 墨竹工卡县| 孟村| 微山县| 邵阳县| 龙山县| 林西县| 扶沟县|