编辑:我非常感谢大家的投入.我从所有的答复中获得了一些东西,并且学到了很多关于OOD的内容.
我正在做一个简单的虚拟桌面战争游戏.为了在战场上代表单位,我有以下简单的类层次结构:抽象类单元和两个派生类,部队和车辆.
我有另一个类,有游戏中所有单位的散列表.哈希表值是Unit类型,所以我可以在O(1)时间引用它们.
在很大程度上,这是很好的,但是有时调用者需要知道某些东西是部队还是车辆来从这些派生类中调用特定的方法.为了适应这一点,我创建了两种可以强制执行类型的get方法:
public Troop getTroop(String uniqueID) {
Unit potentialTroop = get(uniqueID);
if(potentialTroop instanceof Vehicle) {
throw new InternalError();
}
return (Troop) potentialTroop;
}
public Vehicle getVehicle(String uniqueID) {
Unit potentialVehicle = get(uniqueID);
if(potentialVehicle instanceof Troop) {
throw new InternalError();
}
return (Vehicle) potentialVehicle;
}
(注意这个属性的类只是扩展Hashtable,所以这里使用的get方法是Java的哈希表的get方法.)
所以我认为这是糟糕的OOD设计,因为如果我进一步扩展单元我将不得不添加更多的检查和更多的#get方法到这个散列表.
我是说正确的吗?如果是这样,有人有其他的OOD建议吗?