代码之家  ›  专栏  ›  技术社区  ›  Roman

如何在Java中创建类存储库,我真的需要它吗?

  •  2
  • Roman  · 技术社区  · 15 年前

    我有大量的对象,它们由名称(字符串)标识。所以,我希望有一种从对象名到类实例的映射。

    有人告诉我,在这种情况下,我可以使用这样一个“存储库”类:

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

    因此,如果已经存在一个名为“nameofserver”的对象(服务器),则“getserver”将返回该对象(服务器)。如果这样的对象还不存在,它将由“getserver”创建并返回。

    所以,我的问题是如何编写这样一个“存储库”类?在这个类中,我必须能够检查一个给定类的实例是否具有给定字段的给定值。我该怎么做?我需要对给定类的所有现有对象进行一种循环?

    我问题的另一部分是为什么我不能使用关联数组(关联容器、映射、映射、字典、有限映射)?(我不知道你怎么称呼它在爪哇)更详细地说,我有一个“数组”,它把对象的名字映射到对象。因此,每当我创建一个新对象时,我都会向数组中添加一个新元素: myArray["NameOfServer"] = new Server("NameOfServer") .

    1 回复  |  直到 15 年前
        1
  •  3
  •   Péter Török    15 年前

    我自己用一个关联容器来实现它,但是最好在适当的接口后面隐藏实现细节。这使得客户机更容易使用,而且随着时间的推移,您更容易更改/微调实现。

    例如,您可以从一个简单的 HashMap 后来发现,出于某种原因, TreeMap 会更好。或者,您意识到随着时间的推移,许多未使用的对象在映射中累积,这些对象不再被任何其他人引用,但不能被垃圾收集,因为映射保持对它们的引用。所以你可以决定切换到 WeakHashMap . 如果您的实现隐藏在接口后面,那么您可以在不影响客户机的情况下进行这些更改。