国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 临安市| 石城县| 商城县| 辽宁省| 民丰县| 寿宁县| 凤冈县| 平泉县| 晋州市| 五寨县| 通河县| 屏东市| 山西省| 呼伦贝尔市| 阿克陶县| 高州市| 牙克石市| 东城区| 岚皋县| 双牌县| 资中县| 玉龙| 阿克陶县| 东海县| 康平县| 休宁县| 玉田县| 河源市| 英德市| 赣榆县| 东明县| 通城县| 新蔡县| 通许县| 翼城县| 玉山县| 崇文区| 乡宁县| 油尖旺区| 松滋市| 南澳县|