我正在构建一个小型角色扮演游戏。一个角色有多个属性,比如:力量、魔法、射箭和防御。玩家还可以穿戴装备,如 Helm 、躯干、腿、 Boot 、手套和武器。每件装备都有自己的统计数据。例如,银色躯干有 10 防御力。
当角色有,比如 15 防御,并且他穿着银色躯干,他的防御现在将是 25。无论如何,为了穿装备,它需要被生产。目前我用抽象工厂模式设计它(见图片)。
设计有很多类,其中大部分基本没用,比如青铜 Helm 、银躯干等等,因为它们只有一个实例类统计。
最佳答案
The design has a lot of classes, with most of them are basically useless, like Bronze Helmet, Silver Torso et cetera, because they only have an instance of the class Stats.
您似乎没有充分理由爆炸您的设计。整个层次结构可以只替换为一个名为 Equipment
的类。
public class Equipment {
private Stats stats;
private String equiptmentName;
//constructors and getters and setters follow..
}
您的Player
类然后可以有Set
的Equipment
,如下所示。无论何时安装或卸载设备,您都可以使用 Equipment
中的 stats
更新 Player
统计数据。
public class Player {
private Set<Equipment> mountedEquipment;
private Stats baseStats;
public Player(Stats baseStats) {
this.baseStats = baseStats;//set base stats for player
mountedEquipment = new HashSet<Equipment>();
}
public void mountEquipment(Equipment equipment) {
baseStats.setMagic(baseStats.getMagic()+equipment.getStats().getMagic());
//update base stats similarly for strength, hitpoints, etc
mountedEquipment.add(equipment);
}
public void unmountEquipment(Equipment equipment) {
baseStats.setMagic(baseStats.getMagic()-equipment.getStats().getMagic());
//update base stats in a similar fashion for strength, hitpoints, etc
mountedEquipment.remove(equipment);
}
public Set<Equipment> getMountedEquiptment() {
return Collections.unmodifiableSet(mountedEquiptment);
}
}
您实际上不需要您在问题中显示的任何Factory 类,因为您可以将所有可能的stats
添加到Equipment
和 Player
类,每当您引入新的 Equipment
类型时。
关于java - 为角色制作装备时子类太多(角色扮演游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42352929/