日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式 -- 亨元模式(FlyWeight Pattern)

發(fā)布時(shí)間:2023/11/29 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式 -- 亨元模式(FlyWeight Pattern) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

用來盡可能減少內(nèi)存使用量,適用于存在大量重復(fù)對(duì)象的場(chǎng)景,達(dá)到對(duì)象共享,避免創(chuàng)建過多對(duì)象的效果,提升性能,避免內(nèi)存溢出。

定義:

使用共享對(duì)象有效支持大量細(xì)粒度對(duì)象。

適用場(chǎng)景:

  • 系統(tǒng)中存在大量相似對(duì)象;
  • 細(xì)粒度對(duì)象具備接近外部狀態(tài),內(nèi)部狀態(tài)與環(huán)境無(wú)關(guān);
  • 需要緩沖池。
  • 亨元模式其實(shí)是通過集合來緩沖對(duì)象,獲取的時(shí)候,先判斷集合里面是否存在該對(duì)象,如果有就取出來,沒有創(chuàng)建新的,避免不必要的對(duì)象創(chuàng)建。

    簡(jiǎn)單例子:

    接口類:

    public interface Ticket {public void showTicketInfo(String bunk); }

    接口實(shí)現(xiàn)類:

    public class AirTicket implements Ticket {public String from;public String to;public String bunk;public int price;public AirTicket(String from, String to) {this.from = from;this.to = to;}@Overridepublic void showTicketInfo(String bunk) {price = new Random().nextInt(300);System.out.println("從" + from + "到" + to + "的" + bunk + "價(jià)格:" + price);} }

    亨元工廠類,創(chuàng)建對(duì)象池,創(chuàng)建亨元對(duì)象:

    public class AirTicketFactory {public static Map<String, Ticket> tickets = new ConcurrentHashMap<String, Ticket>();/*** 亨元模式具體體現(xiàn),緩沖對(duì)象數(shù)據(jù),減少對(duì)象創(chuàng)建* @param from* @param to* @return*/public static Ticket getTicket(String from, String to) {String key = from + "-" + to;if (tickets.containsKey(key)) {return tickets.get(key);}else {AirTicket airTicket = new AirTicket(from, to);tickets.put(key, airTicket);return airTicket;}} }

    測(cè)試類:

    public class Main {public static void main(String[] args) {Ticket toXianAirTicket0 = AirTicketFactory.getTicket("深圳", "西安");Ticket toBeiJingAirTicket = AirTicketFactory.getTicket("深圳", "北京");Ticket toXianAirTicket1 = AirTicketFactory.getTicket("深圳", "西安");Ticket toXianAirTicket2 = AirTicketFactory.getTicket("深圳", "西安");toXianAirTicket0.showTicketInfo("頭等艙");toBeiJingAirTicket.showTicketInfo("商務(wù)艙");toXianAirTicket1.showTicketInfo("頭等艙");toXianAirTicket2.showTicketInfo("頭等艙");} }

    結(jié)果:

    從深圳到西安的頭等艙價(jià)格:114 從深圳到北京的商務(wù)艙價(jià)格:215 從深圳到西安的頭等艙價(jià)格:231 從深圳到西安的頭等艙價(jià)格:103

    ?

    總結(jié)

    以上是生活随笔為你收集整理的设计模式 -- 亨元模式(FlyWeight Pattern)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。