2012-09-17 38 views
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) { 
    // 
    } 
} 
+1

所有你需要的是一個類有兩個靜態字段,一個用於短期,另一個用於長期。 –

+0

我沒有看到你從你的問題創建3個對象。你的意思是3 *班*?老實說,你的生存時間並不是你需要繼承來實現的東西。按照@波希米亞的答案 –

回答

1

你的設計是有缺陷的:

  • 緩存是一個高速緩存 - 讓緩存類照顧緩存...... 只有
  • 除非對象的數量是大(1000's),不要讓「創建的物體數量」影響你的設計
  • 只有用戶你的緩存類需要知道或關心如何緩存正在使用

這樣:

public class MyClass { 

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

} 

您可以考慮通過一段時間的生存參數到您的緩存類的構造函數讓它在一定時間後管理清除。

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); 
    } 
}