设计模式-结构型-享元模式
小于 1 分钟
1、定义
享元模式:通过共享技术来有效支持大量细粒度对象
写法
public interface Ticket {
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(300);
System.out.println("购买 从 " + from + " 到 " + to + "的" + bunk + "火车票" + ", 价格:" + price);
}
}
public class TicketFactory {
private static Map<String,Ticket> sTicketMap = new ConcurrentHashMap<>( );
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;
}
}
}
/**
*
* 享元模式
* eg: message , 线程池,连接池
* 共享池
*
* 大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能
*
*/
public class TestMain {
public static void main(String[] args){
Ticket ticket01 = TicketFactory.getTicket("北京", "青岛");
ticket01.showTicketInfo("上铺");
Ticket ticket02 = TicketFactory.getTicket("北京", "青岛");
ticket02.showTicketInfo("下铺");
Ticket ticket03 = TicketFactory.getTicket("北京", "西安");
ticket03.showTicketInfo("坐票");
}
}
代码示例
https://github.com/yinlingchaoliu/23-design-pattern