设计模式-享元模式(Flyweight)

2017-08-01  本文已影响30人  小菜_charry

定义

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

相关的名称定义

享元模式的使用场景

享元模式的优缺点

优点:

缺点:

享元模式实例

享元模式实例.png 调用流程.png 目录结构.png
public interface Ticket {
    void showTicketInfo();
}
public class TrainTicket implements Ticket {

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

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

    @Override
    public void showTicketInfo() {
        this.price = new Random().nextInt(100);
        System.out.println("从 " + from + " 开往 " + to + " 的列车,票价为:" + price);
    }
    
}
public class TicketFactory {

    private Map<String, Ticket> mTickets = new HashMap<String, Ticket>();

    public Ticket getTicket(String from, String to) {
        String key = from + "-" + to;
        if (mTickets.containsKey(key)) {
            Ticket ticket = mTickets.get(key);
            return ticket;
        }

        TrainTicket ticket = new TrainTicket(from, to);
        mTickets.put(key, ticket);
        return ticket;
    }
    
    public int getHoldTicketCount(){
        return mTickets.size();
    }

}
public class Client {
    
    public static void main(String[] args) {
        TicketFactory ticketFactory = new TicketFactory();
        
        Ticket ticket1 = ticketFactory.getTicket("深圳", "北京");
        ticket1.showTicketInfo();
        
        Ticket ticket2 = ticketFactory.getTicket("海口", "广州");
        ticket2.showTicketInfo();
        
        Ticket ticket3 = ticketFactory.getTicket("海口", "广州");
        ticket3.showTicketInfo();
        
        System.out.println("持有ticket实例数:"+ticketFactory.getHoldTicketCount());
    }

}

参考:

上一篇 下一篇

猜你喜欢

热点阅读