定义
使共享对象可以有效的支持大量的细粒度的对象,核心其实就是对象复用。
使用场景
- message: 当我们创建message的时候,一般使用Message msg=Message.obtain( ),而不是直接new Message( ),因为Message.obtain()方法可以复用对象,并且用完之后可以回收;
- String 字符串常量池
享元模式代码实现
买火车票为例子:
1.创建Ticket火车票:
package com.example.amn.testdemo.xiangyuan;
import java.util.Random;
/**
* 创建Ticket火车票
*/
public class Ticket {
//起点
private String from;
//终点
private String to;
public Ticket(String from,String to){
this.from=from;
this.to=to;
}
/**
* 价格
*/
public int getPrice(){
return new Random().nextInt(100) + 20 ;
}
}
2.创建火车票查询工厂:
package com.example.amn.testdemo.xiangyuan;
import java.util.HashMap;
import java.util.Map;
public class TicketFactory {
//对火车票 做一个缓存
static Map<String , Ticket> sTicketMap = new HashMap<>() ;
public static Ticket getTicket(String from , String to){
String key = from + "-" + to ;
//先从map缓存中取出一张票
Ticket ticket = sTicketMap.get(key);
// 如果不为空,直接返回
if(ticket != null){
return ticket;
}
//如果未空,则直接创建一个,然后存放到map集合中
ticket = new Ticket(from,to);
sTicketMap.put(key,ticket);
return ticket;
}
}
3.测试
for (int i = 0; i < 1000; i++) {
Ticket ticket = TicketFactory.getTicket("北京" , "广州") ;
}
网友评论