我有一个名为Manhunt的类,它继承了Minigame。为了保持代码和发布的简短性,我只包括相关的方法
public abstract class Minigame {
public abstract void startCountdown();
}public class Manhunt extends Minigame {
@Override
public void startCountdown() {
}
}小型游戏是由MinigameManager处理的
public class MinigameManager {
public void startMinigame(String minigame, int gameKey) {
switch (minigame) {
case "manhunt":
UUID runner = this.playersQueued.remove(this.random.nextInt(this.playersQueued.size()));
this.minigame = new Manhunt(gameKey, runner, this.playersQueued);
this.minigame.startCountdown();
this.playersQueued.clear();
break;
case "tbr":
case "boatracer":
break;
default:
}
}
}问题是,Manhunt和MinigameManager在两个不同的插件中,这意味着当前的设置要求IntelliJ为两个相互引用的程序添加依赖项,从而导致循环依赖问题。如果我添加了额外的迷你游戏(我只需要拖放额外的迷你游戏,而不是在同一个程序中对它们进行编码),我希望将它们分开,但是如何解决这个循环依赖问题?
似乎依赖反转原则应该解决这个问题,但我不知道如何将它融入到我的程序中。我需要为MinigameManager或Minigame创建一个接口吗?如果有人能让我的代码更加模块化,我会很感激的。
发布于 2020-12-30 09:52:57
MinigameManager需要在一个单独的第三个插件中。
MinigameManager依赖于Minigame,但Minigame不依赖于MinigameManager。由于没有相互依赖关系,所以没有理由将这两者放在同一个库中。
然后,MinigameManager将同时依赖于Minigame和Manhunt,而Manhunt仍然将依赖于Minigame。
或者,您可以使用“注册表”类型方法,其中MinigameManager导出Manhunt实现的接口,然后MinigameManager中的一些运行时代码执行一些魔术来枚举和实例化实现其接口的任何类型。在Java中,这是一种常见的方法,但是要清楚:并不能清晰地分离依赖关系,只是简单地将显式依赖项转换为隐式依赖,这种依赖关系必须遵循明确定义的规则,并得到清晰易懂的结构,从而使您能够隐藏重要的结构,避免DAG验证和保护。
https://stackoverflow.com/questions/65504883
复制相似问题