Java 如何设计一个类层次结构,在不实例化子类的情况下提供有关子类的信息
我正在为游戏中的咒语设计课程 首先,我有一个带spelbook的玩家,它指示该玩家可以使用哪些法术Java 如何设计一个类层次结构,在不实例化子类的情况下提供有关子类的信息,java,class-design,Java,Class Design,我正在为游戏中的咒语设计课程 首先,我有一个带spelbook的玩家,它指示该玩家可以使用哪些法术 public class Player { private List<Class<? extends Spell>> speellBook; } 现在我想展示一个关于火弩的工具提示,显示这个法术在没有实例化的情况下造成15点伤害。它应该只在玩家真正施放它时实例化 我已经想到了一个静态场,但是静态场不能被真正的法术所覆盖 然后我想到了一个单例模式,但是由于我也在我的
public class Player {
private List<Class<? extends Spell>> speellBook;
}
现在我想展示一个关于火弩的工具提示,显示这个法术在没有实例化的情况下造成15点伤害。它应该只在玩家真正施放它时实例化
我已经想到了一个静态场,但是静态场不能被真正的法术所覆盖
然后我想到了一个单例模式,但是由于我也在我的法术中存储了当前位置,这也不会起作用
这个有什么标准图案吗?我只找到了原型模式,但sice我需要一个单例,它不可继承您试图对类应用继承(在不同的拼写上统一调用
getDmg
方法),避免对象实例化。正如您已经注意到的,这些需要静态字段和静态方法,但它们不适用于继承。我已经看过很多次了,但都不是这样
我建议创建模板对象并将其用于显示工具提示。例如:
public class SpellTooltip {
private Map<Class<? extends Spell>, Spell> templates = new HashMap<>();
{
templates.put(Firebolt.class, new Firebolt());
templates.put(Frostbolt.class, new Frostbolt());
}
public int getSpellDamage(Class<? extends Spell> clazz) {
return templates.get(clazz).getDmg();
}
}
公共类拼写工具提示{
private Map您正在尝试对类应用继承(统一调用不同拼写的getDmg
方法),避免对象实例化。正如您已经注意到的,这些需要静态字段和静态方法,但它们不适用于继承。我已经见过很多次了,它不适用于这种方式
我建议创建模板对象并将其用于显示工具提示。示例:
public class SpellTooltip {
private Map<Class<? extends Spell>, Spell> templates = new HashMap<>();
{
templates.put(Firebolt.class, new Firebolt());
templates.put(Frostbolt.class, new Frostbolt());
}
public int getSpellDamage(Class<? extends Spell> clazz) {
return templates.get(clazz).getDmg();
}
}
公共类拼写工具提示{
private MapI我认为你想得太多了,只需将法术实例存储在玩家中。如果某个特定法术实例的伤害没有改变,那么引入一个静态变量来表示它有什么错?例如:对于FireBolt,引入一个静态变量fireboltDamage
,因为我的通用工具提示必须能够显示一个法术的dmgYspell@RC.当玩家施法时,我应该克隆对象?克隆与否取决于对象的实现,如果它是无状态的,那么我会重新使用。我认为你想得太多了,只需在玩家中存储咒语实例。如果某个咒语实例的伤害没有改变,引入静态变量有什么错o指出它?例如:对于FireBolt,引入一个静态变量fireboltDamage
,因为我的通用工具提示必须能够显示任何类型的dmgspell@RC.当玩家施法时,我应该克隆这个对象?克隆与否取决于对象的实现,如果它是无状态的,那么我会重用它。