通过参考之间的对象之间的通信



我终于到达了我在爪哇的简单老派蛇时,我在OOP中最受关注的困境。肯定对您来说听起来很微不足道,但我不能长时间把这个问题把这个问题放在单词上。

我的问题是关于对象之间的参考。在传达对象时,什么是惯例和良好的做法?我的意思是,当然,并非每个对象都应该知道其创造者,但是就我而言,我觉得没有其他方法可以彼此交流。例如:

我有Mainmenu类,可以用"新游戏"按钮控制简单的表单。单击按钮时,将创建一个游戏对象(具有自己的表单(,而Mainmenu表单则将新游戏对象的表单设置为可见时不可见。游戏结束后,我想关闭游戏的形式,并使Mainmenu形式重新出现。但是重新出现在游戏对象内发生,因此必须对这个Mainmenu对象有一个引用,因此我将其传递给构造函数,但对我来说是错误的,因为游戏对象不应该知道Mainmenu,它们是独立的事物,是唯一的兴趣游戏对象与Mainmenu的对象是在游戏结束后重新出现,并且感觉没有足够的理由进行其他参考。

应该如何完成?我认为重新出现应该在Mainmenu课程中发生,但是我该如何跟踪游戏结束的游戏?这种问题如何在专业编程中解决?

(对不起,我的英语(

您可以创建一个诸如GameFinishHandler之类的接口,并让MainMenu实现它。Game类在游戏结束时调用所有注册处理程序。

interface GameFinishHandler {
    void doAfterGameFinished();
}
class MainMenu implements GameFinishHandler {
    ...
    private void createGame() {
        this.game = new Game();
        this.game.addHandler(this);
        // ...
    }
    @Override
    public void doAfterGameFinished() {
        game.setVisible(false);
        this.setVisible(true);
    }
class Game {
    private final List<GameFinishHandler> finishHandler = new ArrayList<>();
    public void addHandler(GameFinishHandler handler) {
        finishHandler.add(handler);
    }
    private void afterGameFinished() {
        finishHandler.forEach(GameFinishHandler::doAfterGameFinished);
    }

因此,您的Game类包含您的菜单的参考,但它不知道。它只是容纳任意数量的完成处理程序。

最新更新