设计模式之享元模式

概述

享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

使用场景

  • 系统中存在大量的相似对象。
  • 需要缓冲池的场景。

具体实现


public interface Ticket {
    public void showTicketInfo(String bunk);
}
// 火车票
class TrainTicket implements Ticket {
    public String from; // 始发地
    public String to; // 目的地
    public String bunk; // 铺位
    public int price;

    TrainTicket(String from, String to) {
        this.from = from;
        this.to = to;
    }

    @Override
    public void showTicketInfo(String bunk) {
        price = new Random().nextInt(300);
        System.out.println("购买 从 " + from + " 到 " + to + "的 "
                + bunk + " 火车票" + ", 价格 : " + price);
    }

}

public class TicketFactory {
    static Map<String, Ticket> sTicketMap = new ConcurrentHashMap<String, Ticket>();

    public static Ticket getTicket(String from, String to) {
        String key = from + "-" + to;
        if (sTicketMap.containsKey(key)) {
            System.out.println("使用缓存 ==> " + key);
            return sTicketMap.get(key);
        } else {
            System.out.println("创建对象 ==> " + key);
            Ticket ticket = new TrainTicket(from, to);
            sTicketMap.put(key, ticket);
            return ticket;
        }
    }
}


public class Test {
    public static void main(String[] args) {
         Ticket ticket01 = TicketFactory.getTicket("北京", "青岛");
         ticket01.showTicketInfo("上铺");
         Ticket ticket02 = TicketFactory.getTicket("北京", "青岛");
         ticket02.showTicketInfo("下铺");
         Ticket ticket03 = TicketFactory.getTicket("北京", "青岛");
         ticket03.showTicketInfo("坐票");
        
    }

输出:

创建对象 ==>北京-青岛
购买从北京到青岛的上铺火车票,价格:28
使用缓存 ==>北京-青岛
购买从北京到青岛的下铺火车票,价格:104
使用缓存 ==>北京-青岛
购买从北京到青岛的坐票火车票,价格:148

总结

享元模式实现比较简单,但是它的作用中一些场景确实很重要。它可以大大减少应用程序意外的创建对象。降低程序的内存,增强其性能。但其提高了系统的复杂度。

发布了89 篇原创文章 · 获赞 155 · 访问量 29万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览