2010-03-18 43 views
2

我有大量的名稱(字符串)標識的對象。所以,我想有一種從對象名稱到類實例的映射。如何在Java中創建類存儲庫,我真的需要它嗎?

有人告訴我,在這種情況下,我可以用一個「倉庫」類,它的工作原理類似:

Server myServer = ServerRepository.getServer("NameOfServer"); 

因此,如果已經有一個對象(服務器)與「NameOfServer」這將是由「getServer」返回。如果這樣的對象還不存在,它將被創建並由「getServer」返回。

所以,我的問題是如何編程這樣的「存儲庫」類?在這個類中,我必須能夠檢查給定類的實例是否具有給定字段的給定值。我該怎麼做?我需要對給定類的所有現有對象進行一種循環?

我的問題的另一部分是爲什麼我不能使用關聯數組(關聯容器,映射,映射,字典,有限映射)? (我不確定你如何在Java中調用它)更詳細地說,我有一個「數組」,它將對象的名稱映射到對象。所以,每當我創建一個新對象時,我都會向該數組添加一個新元素:myArray["NameOfServer"] = new Server("NameOfServer")

+0

「所以,我想有一種從對象名稱到類實例的映射。」 不知道我遵循你的邏輯。如果你有大量的對象,你的這個倉庫將佔用大量的內存。 你想優化什麼?對於IoC容器來說, – 2010-03-18 10:34:49

+0

聽起來很好用 – 2010-03-18 12:01:36

回答

3

我會用自己的關聯容器來實現它,但是最好是將實現細節隱藏在適當的接口後面。這使得客戶更易於使用,並且隨着時間的推移,您可以更輕鬆地更改/微調實施。

例如,您可以從一個簡單的HashMap開始,稍後找出由於某種原因,TreeMap會更好。或者你意識到,隨着時間的推移,很多未使用的對象在地圖中累積,不再被其他人引用,但不能被垃圾收集,因爲地圖保留了對它們的引用。所以你可能會決定切換到WeakHashMap。如果您的實現隱藏在接口後面,則可以在不影響客戶端的情況下執行這些更改。

相關問題