设计模式 -- 亨元模式(FlyWeight Pattern)
生活随笔
收集整理的這篇文章主要介紹了
设计模式 -- 亨元模式(FlyWeight Pattern)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用來盡可能減少內存使用量,適用于存在大量重復對象的場景,達到對象共享,避免創建過多對象的效果,提升性能,避免內存溢出。
定義:
使用共享對象有效支持大量細粒度對象。
適用場景:
亨元模式其實是通過集合來緩沖對象,獲取的時候,先判斷集合里面是否存在該對象,如果有就取出來,沒有創建新的,避免不必要的對象創建。
簡單例子:
接口類:
public interface Ticket {public void showTicketInfo(String bunk); }接口實現類:
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 + "價格:" + price);} }亨元工廠類,創建對象池,創建亨元對象:
public class AirTicketFactory {public static Map<String, Ticket> tickets = new ConcurrentHashMap<String, Ticket>();/*** 亨元模式具體體現,緩沖對象數據,減少對象創建* @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;}} }測試類:
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("商務艙");toXianAirTicket1.showTicketInfo("頭等艙");toXianAirTicket2.showTicketInfo("頭等艙");} }結果:
從深圳到西安的頭等艙價格:114 從深圳到北京的商務艙價格:215 從深圳到西安的頭等艙價格:231 從深圳到西安的頭等艙價格:103?
總結
以上是生活随笔為你收集整理的设计模式 -- 亨元模式(FlyWeight Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女儿梦到父母死了是什么征兆
- 下一篇: WPF对某控件添加右键属性