我终于到达了我在爪哇的简单老派蛇时,我在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
类包含您的菜单的参考,但它不知道。它只是容纳任意数量的完成处理程序。