1,缓存基类
public abstract class BaseCache<T> {
static Map<String, Map<String, ?>> _map = new HashMap<String, Map<String, ?>>();
@SuppressWarnings("rawtypes")
static List<BaseCache> _list = new ArrayList<BaseCache>();
protected void add(String key, Map<String, T> value){
_map.put(key, value);
}
protected void remove(String key){
_map.remove(key);
}
protected HashMap<String, T> getMap(String key){
return (HashMap<String, T>) _map.get(key);
}
protected boolean containsKey(String key){
return _map.containsKey(key);
}
protected static void registCache(BaseCache cache){
_list.add(cache);
}
protected abstract Map<String, T> readData();
public abstract HashMap<String, T> getObject();
public abstract T getValue(String key);
public abstract void refresh();
public abstract void refreshValue(String key, T value);
public static void loadAllData(){
for(BaseCache bc : _list){
bc.refresh();
}
}
}
2,一个子类实例
public class SystemArgsCache extends BaseCache<String> {
private static final String CACHE_KEY = "SystemArgs";
private static SystemArgsCache propertiesCache = new SystemArgsCache();
static{
registCache(propertiesCache);
}
private SystemArgsCache(){
}
public static SystemArgsCache getInstance(){
if(propertiesCache == null){
synchronized (SystemArgsCache.class) {
if(propertiesCache == null){
propertiesCache = new SystemArgsCache();
}
}
}
return propertiesCache;
}
private synchronized void addChannelCache(){
add(CACHE_KEY, readData());
}
@Override
protected Map<String, String> readData() {
Map<String, String> map = new HashMap<String, String>();
map.put("a", "a");
map.put("b", "b");
return map;
}
@Override
public HashMap<String, String> getObject() {
if(!containsKey(CACHE_KEY)){
addChannelCache();
}
return getMap(CACHE_KEY);
}
@Override
public String getValue(String key) {
return getObject().get(key);
}
@Override
public void refresh() {
addChannelCache();
}
@Override
public void refreshValue(String key, String value) {
HashMap<String, String> map = getObject();
map.put(key, value);
}
}
参考资料:http://hi.baidu.com/lya_loveme/blog/item/382a9e20167f1051ac34dedc.html