该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
单例模式获得工厂唯一实例,用map保存对象引用,实现快速查找
1.例子
package com.d1zhan.cache;
import java.util.HashMap;
import java.util.Map;
public class CacheFactory {
private static CacheFactory instance;
private Map map;
private CacheFactory(){
map = new HashMap();
}
public synchronized static CacheFactory getInstance(){
if (instance == null) {
instance = new CacheFactory();
}
return instance;
}
public Object lookup(Class clazz,String id){
Object obj = map.get(clazz.getName()+id);
if (obj == null) {
obj=BaseDao.load(clazz,id);//这里是获取对象方式,例如hibernate的session.load(..)
map.put(clazz.getName()+id, obj);
}
return obj;
}
}
2.大家可能发现,这样做,cache里的对象会越来越多,有内存溢出的风险,解决的办法是,应用lru算法,把不常使用的对象,定期从cache清除。