我遇到了一个需要做出设计决定的案例(与其说是程序本身,不如说是为了了解其他人在这种情况下所做的事情,最好将其视为 API )。我有一个枚举类:
public enum Type
{
CAPTAIN(2), // Only Use CalcMorale never other
LEADER(5), // Only use CalcMorale never other
PARTIER(80); // Only use CalcMorale2 never other
int calcMorale(int inMorale)
{
return inMorale * (100 + morale) / 100;
}
int calcMorale2(int inMorale, int teamCount)
{
return inMorale + morale * teamCount;
}
int morale;
private Type(int aMor)
{
morale = aMor;
}
}
有一个类 Character 持有这些枚举之一,也是传入参数的类。
所评论的问题是我只希望某些枚举在枚举类中使用某些方法。领导者增加了 5% 的团队士气,但党员为该党内的每个成员增加了 80%,因此需要另一个参数。我可以通过几种方式解决问题,但想知道社区对他们如何解决问题的普遍共识。
我可以:
让程序员有责任调用正确的方法。(这对我来说听起来不对)。
给每个枚举它自己的函数版本。(这会产生一个巨大的文件,我会重复很多代码)。
将责任留给“Character”类,该类有一个带有开关处理的方法。(这意味着程序员可以更改计算而不是故意的)。但是,如果我想稍后将枚举移动到文件中,这将导致更少的问题。但是,我质疑这是否会破坏封装,如果这只是枚举的责任。
使 Type 成为一个类并通过匿名内部类定义方法。在这种情况下,类将添加到地图中,而不是在枚举类中使用 getByName()。
--
你认为什么最合适?(我更喜欢我的类尽可能地独立,就像我使用 API 一样(它不会),以及您的建议将如何/将根据枚举的数量受到影响?那我想要的情况呢?一个能够同时使用这两种方法的枚举?语言是Java。