0

我有一个应用程序,我需要两个静态缓存,一个是短期的,一个是长期的。

所以我有一个看起来像这样的抽象类。我的想法是创建两个继承自这个抽象类的类,从而获得我的两个静态类。

但是,我突然想到,我正在创建 3 个对象,而我可能只需要一个对象。但我不知道该怎么做。我想要某种工厂课程吗?

有人可以在这里提出一个合适的模式吗?

public abstract class myCache {
    static Map<String, Object> ObjectCache = new ConcurrentHashMap<String, Object>();

    public void put(String Key, T cmsObject) {
    //
    }

      public xxx static get(String objectKey, Class<T> type) {
    //
    }
}
4

2 回答 2

1
public abstract class myCache {

    static ConcurrentMap<Class<?>,Map<String, Object>> ObjectCache = new ConcurrentHashMap<Class<?>,Map<String, Object>>();

    {
         ObjectCache.putIfAbsent(getClass(),new ConcurrentHashMap<String,Object>());
    }

    public void put(String Key, Object cmsObject) {
         ObjectCache.get(this.getClass()).put(key,cmsObject);
    }

    public Object get(String objectKey) {
         return ObjectCache.get(this.getClass()).get(key);
    }
}
于 2012-09-18T02:22:55.593 回答
1

你的设计有缺陷:

  • 缓存就是缓存 - 让缓存类负责缓存...
  • 除非对象的数量很大(1000 个),否则不要让“创建的对象数量”影响您的设计
  • 只有缓存类的用户需要知道或关心缓存的使用方式

因此:

public class MyClass {

    private static MyCache shortTermCache = new MyCache();
    private static MyCache longTermCache = new MyCache();

}

您可以考虑将生存时间参数传递给您的缓存类构造函数,让它在一定时间后管理清除。

于 2012-09-18T02:29:27.007 回答