首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解决两个插件之间的循环依赖问题

解决两个插件之间的循环依赖问题
EN

Stack Overflow用户
提问于 2020-12-30 09:43:17
回答 1查看 180关注 0票数 0

我有一个名为Manhunt的类,它继承了Minigame。为了保持代码和发布的简短性,我只包括相关的方法

代码语言:javascript
复制
public abstract class Minigame {

    public abstract void startCountdown();

}
代码语言:javascript
复制
public class Manhunt extends Minigame {

    @Override
    public void startCountdown() {

    }
    
}

小型游戏是由MinigameManager处理的

代码语言:javascript
复制
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:
        }
    }

}

问题是,ManhuntMinigameManager在两个不同的插件中,这意味着当前的设置要求IntelliJ为两个相互引用的程序添加依赖项,从而导致循环依赖问题。如果我添加了额外的迷你游戏(我只需要拖放额外的迷你游戏,而不是在同一个程序中对它们进行编码),我希望将它们分开,但是如何解决这个循环依赖问题?

似乎依赖反转原则应该解决这个问题,但我不知道如何将它融入到我的程序中。我需要为MinigameManagerMinigame创建一个接口吗?如果有人能让我的代码更加模块化,我会很感激的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-30 09:52:57

MinigameManager需要在一个单独的第三个插件中。

MinigameManager依赖于Minigame,但Minigame不依赖于MinigameManager。由于没有相互依赖关系,所以没有理由将这两者放在同一个库中。

然后,MinigameManager将同时依赖于MinigameManhunt,而Manhunt仍然将依赖于Minigame

或者,您可以使用“注册表”类型方法,其中MinigameManager导出Manhunt实现的接口,然后MinigameManager中的一些运行时代码执行一些魔术来枚举和实例化实现其接口的任何类型。在Java中,这是一种常见的方法,但是要清楚:并不能清晰地分离依赖关系,只是简单地将显式依赖项转换为隐式依赖,这种依赖关系必须遵循明确定义的规则,并得到清晰易懂的结构,从而使您能够隐藏重要的结构,避免DAG验证和保护。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65504883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档