0

所以我有这个要求:

  • 一个名为 Destination 的类
  • 一个名为 Destinations 的 HashMap

Destination 类有一个 Door 类型的对象数组。所以基本上我从一个文件中读取了一个“门”,每个门都有一个属性“目的地”,它告诉我它属于哪个目的地。

我的问题是,什么更好?

a) 包含 Destinations 的对象中的一个方法,该方法检查新门的目的地是否存在于 HashMap Destinations 中,因此将该门插入其现有的 Destination 或创建新的 Destination 然后插入门。

b) 覆盖 (?) Destinations HashMap 的 add 方法并在那里实现前面描述的功能。

c) 另一种方式。

谢谢你。

4

1 回答 1

3

在 Java 和类似语言中,我们更有可能为我们的应用程序创建具有有意义名称的类,而不是我们拥有简单的列表、映射和集合(就像您在更动态的语言中所做的那样)。您几乎永远不会看到有人继承 HashMap 或 ArrayList 或 HashSet 并覆盖他们的 add 或 put 方法。

最“Java-esque”的方法是定义一个名为的类Destinations,它可以包含(作为一个字段)目标对象的哈希映射,由 id 索引。然后,您将只创建对您的应用程序有意义的方法,例如

add(door, destination)

它可以封装你的游戏逻辑。没有人需要知道幕后有一张地图(或列表或集合)。公开地图意味着您的应用程序有一个泄漏的抽象,您将希望避免这种情况。

也许更好:也有可能最适合你的就是只有

class Door

class Destination

并使所有目的地的地图成为Destination的一个字段。如果不知道更多你想要做什么,很难说。尽量减少类的数量似乎是个好主意。你能把你的地图封装到目的地,并制作静态方法来访问所有的门吗?

现在,如果您决定创建一个单独的 Destinations 类,您可以像这样封装您的地图:

class Destinations {
    private static Map<Integer, Destination> map = ...

    public static void add(Door door, Destination destination) ...
}

使通话看起来像:

Destinations.add(door, destination);

或者,您的目的地地图可以是单例的。在单例与实用程序类问题上获得意见总是很有趣。看看什么最适合您的应用。

TL;DR:将地图隐藏在另一个类中,这样客户就不会知道其中有一个java.util.HashMap使用:

  • Destinations具有静态方法的实用程序类
  • 单例类DestinationInfo
  • 地图隐藏为模型对象Destination本身内部的静态字段(使用静态方法)。
于 2013-08-09T23:38:22.707 回答