码迷,mamicode.com
首页 > 其他好文 > 详细

享元模式

时间:2020-02-19 05:43:55      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:code   interface   pre   inter   this   rom   火车票   北京   性能   

个人博客

http://www.milovetingting.cn

享元模式

模式介绍

享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多对象的效果,以提升性能、避免内存移除等。

模式定义

使用共享对象可有效地支持大量的细粒度的对象。

使用场景

  1. 系统中存在大量的相似对象

  2. 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份

  3. 需要缓冲池的场景

简单使用

创建接口

public interface Ticket {

    public void showTicketInfo(String bunk);

}

实现接口

public class TrainTicket implements Ticket {

    private String from;
    private String to;
    private int price;

    public TrainTicket(String from, String to) {
        super();
        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 Main {

    public static void main(String[] args) {
        Ticket ticket1 = TicketFactory.getTicket("北京", "上海");
        ticket1.showTicketInfo("上铺");
        Ticket ticket2 = TicketFactory.getTicket("北京", "上海");
        ticket1.showTicketInfo("中铺");
        Ticket ticket3 = TicketFactory.getTicket("北京", "上海");
        ticket1.showTicketInfo("下铺");
    }

}

输出结果

创建对象==>北京-上海
购买 从 北京 到 上海 的 上铺 火车票,价格:44
使用缓存==>北京-上海
购买 从 北京 到 上海 的 中铺 火车票,价格:66
使用缓存==>北京-上海
购买 从 北京 到 上海 的 下铺 火车票,价格:86

享元模式

标签:code   interface   pre   inter   this   rom   火车票   北京   性能   

原文地址:https://www.cnblogs.com/milovetingting/p/12329525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!