singleton模式:
public class DataCache {
protected static final HashMap map = new HashMap(); // Cache table
private static final Object lock = new Object();
private DataCache() {} // 防止在外部实例化
public static Object getData(Object key) {
Object v = map.get(key);
if (v == null) {
synchronized(lock) {
v = map.get(key); // Check again to avoid re-load
if (v == null) loadDataSource(key);
v = map.get(key); // retrieves data.
}
}
return v;
}
/*
*Load data from data source.
*/
protected static synchronized void loadDataSource(Object key) {
Object value = new Object(); // Load value from data source
map.put(key, value);
}
}