Java 静态缓存-两个“;“实例”;

Java 静态缓存-两个“;“实例”;,java,caching,Java,Caching,我有一个应用程序,需要两个静态缓存,一个短期缓存,一个长期缓存 我有一个抽象类,看起来像这样。我的想法是,我将创建两个继承自这个抽象类的类,从而实现我的两个静态类 然而,我突然想到,我正在创建3个对象,而我可能只需要一个就可以了。但我不知道该怎么做。我想要工厂级的吗 有人能建议一个合适的模式吗 public abstract class myCache { static Map<String, Object> ObjectCache = new ConcurrentHashM

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

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

然而,我突然想到,我正在创建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) {
    //
    }
}
公共抽象类myCache{
静态映射ObjectCache=new ConcurrentHashMap();
公共void put(字符串键,T cmsObject){
//
}
公共xxx静态get(字符串objectKey,类类型){
//
}
}
公共抽象类myCache{
静态并发映射,映射>();
{
putIfAbsent(getClass(),新的ConcurrentHashMap());
}
公共void put(字符串键,对象cmsObject){
ObjectCache.get(this.getClass()).put(key,cmsObject);
}
公共对象get(字符串objectKey){
返回ObjectCache.get(this.getClass()).get(key);
}
}

您的设计有缺陷:

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


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

您所需要的是一个具有两个静态字段的类,一个是短期的,另一个是长期的。我没有看到您从您的问题中创建3个对象。你是说三节课吗?老实说,你的生存时间并不是你需要通过继承来实现的。跟随@Bohemian的答案
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);
    }
}
public class MyClass {

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

}