- 定义:使用共享对象可有效地支持大量的细粒度对象。是池技术的重要实现方式。
- 享元模式:将实例存放到内存中。内存中存在大量实例对象,但并不是所有的实例均有效,可能GC还未到回收时机,采用享元模式可节省内存。如对象池机制可以节省大量实例占用的内存空间。
代码:
public class SignInfo { private String id;//考试人员ID private String location;//考点 private String address; private String phone; public void printSignInfo(){ System.out.println("考试人员ID:"+id+",考点:"+location+",地址:"+address+",电话:"+phone); } } public class SignInfo4Pool extends SignInfo{//给SignInfo对象增加key属性 private String key;//get set public SignInfo4Pool(String key){ this.key = key; } } public class SignInfoFactory { private static HashMap<String,SignInfo> pool = new HashMap<String,SignInfo>(); public static SignInfo getSignInfo(String key){ SignInfo result = null; if(!pool.containsKey(key)){ result = new SignInfo4Pool(key); pool.put(key, result); System.out.println("建立对象--"+key+"--,并放置到对象池中"); }else{ result = pool.get(key); System.out.println("直接从对象池中取对象:"+key); } return result; } } public class Client { public static void main(String[] args) { for(int i=0;i<4;i++){ String location = "考点"+i; for(int j=0;j<10;j++){ String key = location+",人员"+j; } } SignInfo signInfo = SignInfoFactory.getSignInfo("考点3,人员5"); signInfo.printSignInfo(); } }