Java - Swing - MVC/观察者模式-如何构造这两个类以服从MVC模式



我目前正在为一所大学做一个更大的项目,在这个项目中,我(我们)创造了一个小型的《大学大亨》类型的游戏。我目前正在处理GUI的东西,我遇到了一个问题与结构我的代码。

我现在有3个类,它们是gui的一个小提取:

  1. CreateGamePanel.java
  2. TabbedPanePanel.java
  3. UniversityView.java

其中UniversityView与university.java和universityController.java一起是MVC模式的一部分。我们必须使用这种模糊的MVC/观察者模式的组合。让我们从头开始:

CreateGamePanel是一个JPanel,它使我能够创建一个新游戏并输入一些数据。然后,它将创建实际的University实例。重要的部分是:

    }else if (e.getSource() == btnCreate){
        IConfig config = new Config(1);
        IUniversity university = new University(txtFldPlayerName.getText(),  txtFldUniversityName.getText(), config, getSelectedButtonDifficulty());
        UniversityView universityView = new UniversityView();
        UniversityController universityController = new UniversityController(university, universityView);
        TabbedPanePanel mainPanePanel = new TabbedPanePanel(universityView,universityController);
        frame.getContentPane().removeAll();
        frame.setContentPane(mainPanePanel);
        frame.validate();
        frame.repaint();
    }

完整的源代码在这里:http://pastebin.com/8rYBuyzN

正如你所看到的,它将面板从我的框架切换到下一个。TabbedPanePanel。这将作为主面板在这一点上。所有GUI方面的东西都将在这个TabbedPane中集合。

源代码相当小:http://pastebin.com/MfDALzvF

UniversityView的源代码:http://pastebin.com/VP3rYXq2

现在我要创建大学概览。这应该会显示像universityname, playername, year等内容。我有方法从我的UniversityController中的模型获取此信息。但问题是,我的UniversityView然后需要知道UniversityController的引用。但根据MVC模式,不应该是这种情况。

同样根据我们的规范,UniversityView充当University模型的观察者。

所有这些都让我很困惑。那么我该如何整理这些乱七八糟的东西呢?

我不知道该具体说些什么,但我想回顾一下你说过的一些事情:

模糊的MVC/观察者模式组合

MVC模式通常使用观察者和事件进行编码,特别是当许多这些操作可能是异步的,或者当一个操作可能需要很长时间(如通过网络连接查询)时。在Swing中这样做是有意义的,这样可以不占用EDT。

但问题是,我的UniversityView然后需要知道对UniversityController的引用

听起来不像你的视图类需要知道对控制器的引用。您的控制器可以了解视图,然后在需要时,为您描述的大学概述向视图提供一组更新的数据。

没有确切的方法来编写MVC。像这样的模式的目的是为了交流,如果你能以某种正确的方式编写你的程序,并且它可以很容易地用术语MVC描述给其他人,那么你就可以说你已经使用了MVC。在模型、视图和控制器之间传递信息只需要使用一种特定的方法,并且您已经发现该方法可以很好地与您的应用程序配合使用。

据我所知,您想要访问视图字段中的信息。要做到这一点,你不需要在视图中有控制器对象。但是你应该在控制器中对两个对象进行视图和建模。MVC模式告诉视图和模型之间的所有连接应该只通过控制器来完成。

您可以在这里获得更多信息http://shulgadim.blogspot.in/2012/01/model-view-controller-mvc-pattern_13.html

最新更新