设计模式

享元模式(FlyWeight)

2020-07-22  本文已影响0人  秀儿2020

定义

运用共享技术有效地支持大量的细粒度对象。

本质

分离与共享

登场角色

示例代码

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

public class TrainTicket implements Ticket{
    public String from;
    public String to;
    public String bunk;
    public int price;

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

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


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

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


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

运行结果

创建对象
购买从北京到上海的上铺 火车票,价格为: 17
使用缓存
购买从北京到上海的下铺 火车票,价格为: 35
创建对象
购买从北京到青岛的坐铺 火车票,价格为: 12

优点

缺点

使用场景

上一篇 下一篇

猜你喜欢

热点阅读