所以我有这个要求:
Destination类有一个Door类型的对象数组。所以基本上我从文件中读到一个“门”,每个门都有一个属性“目的地”,它告诉我它属于哪个目的地。
我的问题是,什么更好?:
a)对象中保存目标的方法,该目标检查HashMap目的地中是否存在新门的目的地,因此将该门插入其现有目的地或创建新目的地然后插入门。
b)覆盖(?)Destinations HashMap的add方法,并在那里实现之前描述的功能。
c)另一种方式。
谢谢。
答案 0 :(得分:3)
在Java和类似语言中,我们更有可能为我们的应用程序创建具有有意义名称的类,而不是使用简单列表,地图和集合(就像在更动态的语言中一样)。你几乎从未见过的是有人继承HashMap或ArrayList或HashSet并覆盖他们的add或put方法。
最“Java-esque”的方法是定义一个名为Destinations
的类,它可以包含(作为字段)目标对象的哈希映射,由id索引。然后,您将只创建对您的应用程序有意义的方法,例如
add(door, destination)
可以封装你的游戏逻辑。没有人需要知道幕后有地图(或列表或集)。公开地图意味着你的应用程序有一个漏洞抽象,你要避免。
也许更好:最适合你的是有可能只有
class Door
和
class 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
内部隐藏为静态字段(使用静态方法)的地图。