1类图
2定义
使用共享对象可有效地支持大量的细粒度的对象。
3应用场景
3.1 系统有大量的相似对象。
3.2 细粒度的对象都具备较近似的外部形态,而且内部状态与环境无关,也就是说对象没有特定身份。
3.3 需要缓冲池的场景。
4Ticket接口
public interface Ticket {
public void showTicketInfo(String bunk);
}
5火车票
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 );
}
}
6车票工厂
public class TicketFactory {
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;
}
}
}
7客户端
public class Client {
public static void main(String[] args) {
Ticket ticket01 = TicketFactory.getTicket("北京","青岛");
ticket01.showTicketInfo("上铺");
Ticket ticket02 = TicketFactory.getTicket("北京","青岛");
ticket02.showTicketInfo("下铺");
Ticket ticket03 = TicketFactory.getTicket("北京","青岛");
ticket03.showTicketInfo("坐票");
}
}