从HashMap (java)中获取具有特定类的特定对象

  • 本文关键字:对象 获取 HashMap java java
  • 更新时间 :
  • 英文 :


我有一个bean类和规则类包。

我正在尝试创建不同规则的HashMap,以便访问其他类中的不同规则。

在TripleTriad.java(管理我的游戏的类)我有:

public static Map<RuleType, Rule> ruleList = new HashMap<>();
private void createRuleMap(Map<RuleType, Rule> ruleList) {
ruleList.put(COMBO, new RuleCombo());
ruleList.put(ELEMENTALE, new RuleElementales());
ruleList.put(IDENTIQUE, new RuleIdentique());
ruleList.put(MEMEMUR, new RuleMemeMur());
ruleList.put(PLUS, new RulePlus());
}
public static Rule callRule(Map<RuleType, Rule> ruleMap, RuleType ruleType) {
return ruleMap.get(ruleType);
}

我有一个接口规则(尝试使用一个接口,但不确定我在做什么)。

然后我有不同的规则。例如:

public class RuleCombo implements Rule {
public RuleCombo() {
}
public static void resolveRule(Tile tilePosee, FrameTT frame, Board board) {
if (ruleExisting(IDENTIQUE)) {
RuleIdentique.resolveRule(tilePosee, frame, board);
}
if (ruleExisting(PLUS)) {
RulePlus.resolveRule(tilePosee, frame, board);
}
for (Direction direction : Direction.values()) {
Tile tileDirection = getAdjacentTile(tilePosee, direction, board);
if (checkTileExist(tileDirection)) {
if ((tileDirection.getPlayer() != tilePosee.getPlayer()) && checkTileIsOccupied(tileDirection)) {
if (ruleExisting(ELEMENTALE)) {
RuleElementales.resolveRule(tilePosee, tileDirection, direction, frame, board);
} else {
cardPoseeWin(tilePosee, tileDirection, direction, frame, board);
}
}
}
}
}
}

实际上,resolveRule()方法是静态的,它似乎不是那么好。问题是,每个规则都可以调用另一个规则。这就是为什么我尝试使用HashMap和静态方法来获取我的规则对象。

要正确使用它,我必须这样写:

RuleCombo ruleCombo = (RuleCombo) callRule(ruleList, COMBO);
ruleCombo.resolveRule(tileDirection, frame, board);

有更好的写法吗?

好的,所以我试图得到一些信息的责任链。我不确定,但我想我明白了。问题是,在我找到的这种绘图中,我仍然不明白如何管理两个方法相互调用。我也有一个方法调用自己(它工作)。唯一可以通过删除静态标志来工作的是把我的规则对象放在参数中,但这显然不是解决方案。

RuleType是enum,是。对不起,我忘了说……

public enum RuleType { IDENTIQUE, PLUS, COMBO, MEMEMUR, ELEMENTALE }

我认为整个规则部分是一团糟…我只是缺少一些基础知识。也许我不需要接口,每个规则都是一个抽象类。在这种情况下,我不需要从它创建一个对象。

最新更新