0

短期用と長期用の 2 つの静的キャッシュが必要なアプリケーションがあります。

だから私はこのような抽象クラスを持っています。この抽象クラスから継承する 2 つのクラスを作成し、それによって 2 つの静的クラスを取得しようと考えました。

しかし、私は 3 つのオブジェクトを作成しているのに、1 つのオブジェクトでうまくいく可能性があることに気が付きました。しかし、私はそうする方法に途方に暮れています。ある種のファクトリークラスが必要ですか?

誰かがここで適切なパターンを提案できますか?

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

あなたのデザインには欠陥があります:

  • キャッシュはキャッシュです-キャッシングクラスにキャッシングを任せてください...のみ
  • オブジェクトの数が多くない限り(1000)、「作成されたオブジェクトの数」がデザインに影響を与えないようにしてください
  • キャッシュクラスのユーザーだけが、キャッシュがどのように使用されているかを知っているか、気にする必要があります

したがって:

public class MyClass {

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

}

存続時間パラメーターをキャッシュクラスコンストラクターに渡して、特定の時間が経過した後のパージを管理できるようにすることを検討してください。

于 2012-09-18T02:29:27.007 に答える
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 に答える