昨晚我在开发一个小游戏时给自己编写了一个问题。有一天,我说服自己,我应该把一些业余时间投入到一些富有成效的事情上,所以我决定开始开发基于文本的角色扮演游戏,而不是玩游戏。然后,我谈到了在游戏中代表货币的问题。现在,因为这只是为了好玩,我想挑战一下自己。而不是仅仅将货币表示为单一值(例如:称为“金币”的单一类型硬币并不是游戏中唯一的硬币类型。)
我决定创造 4 种硬币 - 便士、铜、第纳尔和奥伦。所有 4 枚硬币都有重量、体积、 Material 和名称等数值。此外,硬币有汇率,这决定了它们的相对值(value)。这样做的目的是允许对一种无聊的旧货币有不同的用途。我的问题是我不确定如何实现它。
我昨晚得到的是 4 个类(Pence、Copper、Denar、Oren)扩展了一个抽象类 Coin。 Coin 包含许多 protected 静态元素,例如所有 4 个子类的 DENSITY、VOLUME、NAME、EXCHANGE。
子类的构造函数如下所示:
public Coppers() {
super();
super.metal = COPPER_METAL;
super.name = COPPER;
super.setVolume();
super.setDensity();
super.setWeight();
}
父类(super class)中的方法如下所示:
protected void setDensity() {
switch( getMetal()) {
case "copper":
this.density = DENSITY_COPPER;
break;
case "silver":
this.density = DENSITY_SILVER;
break;
case "gold":
this.density = DENSITY_GOLD;
break;
default:
this.density = DENSITY_COPPER;
break;
};
}
这看起来非常……错误。我不确定最佳实践是什么。我向我的 friend 询问有关使用静态类来保存这些值的问题,并得到了不同的答复。不过,这些类(class)的要点很重要。假设玩家类有一个名为 Purse 的对象,它跟踪不同类型硬币的数量。玩家可以使用钱包在银行兑换硬币、购买商品以及出售商品换取硬币。持有一组所有实例化的硬币是没有任何意义的,对吧?我只需要信息和方法。那么实现静态类有意义吗?当 4 种硬币共享如此多的属性时,我怎样才能让它们发挥最佳性能?
最佳答案
在这种情况下您可以做的是使用Enum
。您枚举所需的常量,通过其构造函数为它们指定类型。
现在我们有了它们的类型,我们可以将其与您在代码中处理的字符串进行比较,如果没有任何类型匹配,我们默认将其设置为 Density.COPPER
。
Density density;
protected void setDensity (String metal) {
for (Density d : Density.values()) {
if (metal.equals(d.getType())) {
this.density = d;
return;
}
}
this.density = Density.COPPER;
}
enum Density {
COPPER("copper"),
SILVER("silver"),
GOLD("gold");
String type;
Density(String s) {
type = s;
}
public String getType() {
return type;
}
}
关于java - 使用静态类来表示不同形式的货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494032/