java - MVC模式;我的模型类需要用户输入,但我知道它不应该询问用户或 Controller

标签 java oop model-view-controller

我正在使用 MVC 模式创建一个简单的 Blackjack 游戏。

主 Controller 称为Game,主视图称为BlackjackView,我当前使用的它的实现是ConsoleView,主模型类称为 Blackjack

这是一些简化的代码,我不明白如何实现下一部分:

游戏.java

public class Game {
    private Blackjack blackjack;
    private BlackjackView view;

    public static void main(String[] args) {
        Game game = new Game();
        game.start();
    }

    private void start() {
        blackjack = Blackjack.initializeGame();
        view = new ConsoleView(blackjack);

        blackjack.takeTurns();
    }
}

Blackjack.java

import java.util.*;

public class Blackjack {
    private List<Person> players = new ArrayList<Person>();

    public static Blackjack initializeGame() {
        return new Blackjack();
    }

    public void takeTurns() {
        for (Person player : players) {
            // ask player to 'hit' or 'stay'
        }
    }
}  

我无法理解如何做到这一点,因为 Blackjack 应该与询问用户某些事情或获取用户输入无关。

据我正确理解,我的 View 类必须显示问题(“玩家,你想击中还是留下?”)并且我的 Controller 类必须处理输入。

我想将对 Game 的引用传递给 Blackjack,这样我就可以要求它询问用户输入,但我知道我不应该这样做那个。

最佳答案

根据您向我们展示的内容,您实际上尚未创建 Controller 或 View 。该模型不应该向任何人“询问”任何事情。这是一个选择并告知的过程。

输入 View 告诉 Controller 提供了哪些输入。 Controller 选择模型实例,然后告诉模型要处理哪些输入。然后 Controller 选择下一个 View ,然后告诉 View 它使用的模型实例。然后, View 向模型询问结果,并根据 View 逻辑格式化结果。然后,该 View 要么等待输入,要么调用输入 View 来执行此操作。循环重复。

关于java - MVC模式;我的模型类需要用户输入,但我知道它不应该询问用户或 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46101843/

相关文章:

java - 覆盖具有抽象基类参数的方法

c++ - 将字段声明为 const 调用 "function operator=(const memAddress &) cannot be referenced -- it is a deleted function"

javascript - MVC中数据库查询后重新加载页面js

javascript - 无法设置值以选择挖空

java - 使用 Java NIO,如何区分客户端?

java - 我可以使用哪个免费 Java 库在 Java 中生成 PDF?

perl - 使用 Type::Tiny 将类型参数化为另一种类型

xml - 当 Spring MVC 项目在 Eclipse 上运行时,Tomcat 试图打开 xml 文件

java - IntelliJ IDEA,urn :java? 的 xml namespace

java - EditText 上的 setText 无法正常工作