【问题标题】:MVC pattern : some difficultiesMVC 模式:一些困难
【发布时间】:2014-12-25 16:08:35
【问题描述】:

在一个项目的上下文中,我必须使用 MVC 模式在 java 中实现一个纸牌游戏。目前游戏在控制台上运行良好,但我必须添加一个图形用户界面。我很了解控制器和模型的工作方式,但我在视图中遇到了一些困难。

你看,我有很多模型类,比如“Player”“Card”等,它们都是从 Observable 扩展而来的。 因此,我想我应该有很多意见。但是我的应用程序将发生在一个 JFrame 对象中,该对象将在一个视图类中。

我的问题是:所有不同的视图类如何能够访问另一个视图类中包含的 JFrame 对象(例如添加按钮等)? (我猜 JFrame 应该在 GameObserver 之类的类中)

【问题讨论】:

  • 为什么你的 JFrame 不是 View 类?你有什么看法?如果没有多个视图,就很难理解 MVC。

标签: java swing design-patterns model-view-controller controller


【解决方案1】:

独立于MVC,如果你只有一个主JFrame并且你从不创建另一个,那么将其设为Singleton并静态访问它可能是一个很好的解决方案,例如SingletonFrame.getInstance()。

创建单例模式的方法有很多,这里有一种:

public class SingletonFrame extends JFrame {

    private SingletonFrame() {
        //your initialization code
    }

    private static class SingletonHolder { 
        public static final SingletonFrame instance = new SingletonFrame();
    }

    public static SingletonFrame getInstance() {
        return SingletonHolder.instance;
    }

}

【讨论】:

  • 好的,谢谢!我没有考虑。我也听说过视图的复合模式(即使我不知道它是如何工作的),它是否也可以解决我的问题?
  • 复合模式可以统一处理单个对象和对象的组合,实现一致的处理,简化代码。关于复合视图,这将帮助您创建一个包装模型,例如其中包含一些项目的面板,另一个小部件是面板的一部分,其中包含一些其他项目等等。检查这篇文章stackoverflow.com/questions/13578312/…
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 2012-10-18
  • 1970-01-01
相关资源
最近更新 更多