import java.util.Calendar;
import java.util.HashMap;
import java.util.Hashtable;
public class CacheHelper {
??? public final static int default_interval_second = 20;
??? public static boolean?? ISDEBUG???????????????? = true;
??? private static HashMap? map???????????????????? = new HashMap();
??? private static Object?? obj???????????????????? = new Object();
??? public static ICache getCache(String uniquekey) {
??????? synchronized (obj) {
??????????? ICache ic = (ICache) map.get(uniquekey);
??????????? if (ic == null) {
??????????????? ic = new CacheEntity(uniquekey);
??????????????? map.put(uniquekey, ic);
??????????? }
??????????? return ic;
??????? }
??? }
??? public interface ICache {
??????? Object get();
??????? Object get(long timestamp);
??????? void set(Object obj);
??????? void set(long timestamp, Object obj);
??????? void clear(String regx);
??????? void clearAll();
??? }
??? private static class CacheEntity implements ICache {
??????? private Hashtable hm??????? = new Hashtable();
??????? private Object??? uniquekey = this;
??????? private long????? timestamp = Long.MIN_VALUE;
??????? public CacheEntity(Object uniquekey) {
??????????? this.uniquekey = uniquekey;
??????? }
??????? public Object get(long timestamp) {
??????????? if (timestamp <= this.timestamp) {
??????????????? // 當前時間在設定的過期時間之前,表示還沒有過期。
??????????????? // 如果還沒過期,那么就返回。
??????????????? Object obj = hm.get(uniquekey);
??????????????? if (ISDEBUG && obj != null) {
??????????????????? // 輸出日志。
??????????????????? System.out.println("[" + timestamp + "][Reading cache][" + uniquekey + "]...");
??????????????? }
??????????????? return obj;
??????????? }
??????????? else {
??????????????? // 清理垃圾。
??????????????? hm.remove(uniquekey);
??????????????? return null;
??????????? }
??????? }
??????? public void set(long timestamp, Object obj) {
??????????? this.timestamp = timestamp;
??????????? hm.put(uniquekey, obj);
??????? }
??????? public Object get() {
??????????? Calendar cal = Calendar.getInstance();
??????????? return get(cal.getTimeInMillis());
??????? }
??????? public void set(Object obj) {
??????????? Calendar cal = Calendar.getInstance();
??????????? cal.add(Calendar.SECOND, default_interval_second);
??????????? set(cal.getTimeInMillis(), obj);
??????? }
??????? public void clear(String regx) {
??????????? java.util.Enumeration keys = hm.keys();
??????????? while (keys.hasMoreElements()) {
??????????????? String key = (String) keys.nextElement();
??????????????? if (key.matches(regx)) {
??????????????????? hm.remove(key);
??????????????? }
??????????? }
??????? }
??????? public void clearAll() {
??????????? hm.clear();
??????? }
??? }
}