设计模式 -- 亨元模式(FlyWeight Pattern)
生活随笔
收集整理的這篇文章主要介紹了
设计模式 -- 亨元模式(FlyWeight Pattern)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
用來盡可能減少內(nèi)存使用量,適用于存在大量重復(fù)對(duì)象的場(chǎng)景,達(dá)到對(duì)象共享,避免創(chuàng)建過多對(duì)象的效果,提升性能,避免內(nèi)存溢出。
定義:
使用共享對(duì)象有效支持大量細(xì)粒度對(duì)象。
適用場(chǎng)景:
亨元模式其實(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女儿梦到父母死了是什么征兆
- 下一篇: WPF对某控件添加右键属性