基本的MVC - 简单的Java程序

时间:2011-12-21 07:14:36

标签: java model-view-controller user-interface

我开始学习编程,我创建了一个简单的BlackJack控制台游戏。现在我正在尝试使用swing / JFrame创建一个GUI,并决定尝试同时学习MVC的基础知识。我遇到了关于MVC的java / gwt UI coding - clean code

我的问题是视频在击中“击中”之后应该如何通知玩家手牌的变化。

如果用户想要点击,hitBtn(in VIEW) -> actionListener()(in CONTROLLER) -> hit()(in MODEL)

 - hit() would than modify the nessessary model classes 
   (i.e. DealtCards, Deck, Cards objects)

视图应该如何知道模型已经改变,更基本的是视图应该如何显示模型类中的数据,例如玩家手?在模型类中使用getter方法或从Model到Controller传递给View? (我的印象是View不应该对模型有任何引用)

谢谢!

2 个答案:

答案 0 :(得分:1)

用于通知有关模型更改的视图:
1. PropertyChangeListener
2.控制器可以充当视图和传播变化的模型之间的桥梁 我不认为不从视图引用到模型总是不可接受的。如果您有模型类型的清晰界面并且隐藏了实际实现,则视图可能会引用它 另请参阅data binding,这是SWT,但该方法是独立于实现的。

答案 1 :(得分:0)

视图中没有引用控制器的问题,也没有控制器保持对视图的引用。它必须是那种工作方式。重要的是你如何将引用传递给每个引用以使它们松散耦合。我通常使用对接口和构造函数或setter注入的引用来执行绑定。更多关于此链接中的控制反转:
http://martinfowler.com/articles/injection.html

MVC的基本思想是:

  • 模型,视图和控制器的代码接口。
  • 模型,视图和控制器的代码实现。
  • 尽可能地将它们分开。

关于控制器的提示:我通常将ActionListeners和其他特定的GUI类放在视图实现中,然后从那里将我自己的事件发送到控制器。这样,如果我想将应用程序移植到具有不同GUI的其他平台,我可以重用视图接口,控制器接口和可能的控制器实现。唯一不经常可重用的是视图实现和模型实现。