我有大量的对象,这些对象由名称(字符串)标识。所以,我希望有一种从对象名到类实例的映射。
有人告诉我,在这种情况下,我可以使用“存储库”类,它的工作原理如下:
Server myServer = ServerRepository.getServer("NameOfServer");
因此,如果已经有一个带有“NameOfServer”的对象(服务器),它将由“getServer”返回。如果这样的对象尚不存在,它将由“getServer”创建并返回。
所以,我的问题是如何编写这样的“存储库”类?在这个类中,我必须能够检查是否存在给定类的实例,使其具有给定字段的给定值。我该怎么做?我需要对给定类的所有现有对象进行一种循环?
我的另一部分问题是为什么我不能使用关联数组(关联容器,地图,映射,字典,有限映射)? (我不确定你是如何在Java中调用的)更多细节,我有一个“数组”,它将对象的名称映射到对象。因此,每当我创建一个新对象时,我都会向该数组添加一个新元素:myArray["NameOfServer"] = new Server("NameOfServer")
。
答案 0 :(得分:3)
我自己会用一个关联容器实现它,但最好隐藏适当接口背后的实现细节。这使得它更容易用于客户端,并且更容易随着时间的推移更改/微调实现。
例如,您可以从一个简单的HashMap
开始,稍后会发现,由于某种原因,TreeMap
会更好。或者你意识到,随着时间的推移,许多未使用的对象会在地图中累积,不再被其他任何人引用,但不能被垃圾收集,因为地图会保留对它们的引用。因此,您可以决定切换到WeakHashMap
。如果您的实现隐藏在接口后面,则可以在不影响客户端的情况下执行这些更改。