java - 纸牌游戏中的mvc设计

标签 java model-view-controller javafx-2 playing-cards

我正在尝试制作纸牌游戏。

我的一些类是:CardModel、CardView;甲板模型,甲板 View 。

deck 模型有一个卡片模型列表,根据 MVC,如果我想将卡片发送到卡片组,我可以将卡片模型添加到卡片模型,卡片 View 将添加到卡片组 View 通过事件处理程序。

所以我在 DeckModel 类中有一个 addCard(CardModel m),但是如果我想发送一个事件将该模型的卡片 View 添加到牌组 View 中,我只知道让模型有一个 View 的引用。

那么问题是:如果卡片模型和套牌模型必须要有一个对它们的 View 类的引用才能做到呢?如果没有,如何做得更好?

更新,代码:

public class DeckModel {
private ArrayList<CardModel> cards;

private ArrayList<EventHandler> actionEventHandlerList;

public void addCard(CardModel card){
    cards.add(card);

    //processEvent(event x);
    //must I pass a event that contain card view here?
}

CardModel getCards(int index){
    return cards.get(index);

}

public synchronized void addEventHandler(EventHandler l){
    if(actionEventHandlerList == null)
        actionEventHandlerList = new ArrayList<EventHandler>();

    if(!actionEventHandlerList.contains(l))
        actionEventHandlerList.add(l);
}

public synchronized void removeEventHandler(EventHandler l){
    if(actionEventHandlerList!= null && actionEventHandlerList.contains(l))
        actionEventHandlerList.remove(l);
}

private void processEvent(Event e){
    ArrayList list;

    synchronized(this){
        if(actionEventHandlerList!= null)
            list = (ArrayList)actionEventHandlerList.clone();
        else
            return;
    }
    for(int i=0; i<actionEventHandlerList.size(); ++i){
        actionEventHandlerList.get(i).handle(e);
    }
}
}

最佳答案

在一个好的 MVC 模型中不应该知道 View 。为此,您可以为模型提供 Controller 将订阅的监听器接口(interface)。因此 Controller 可以在 Model 更改后更新 View。

在 JavaFX 中有下一个支持:ObservableList、属性和绑定(bind)。您可以在 ListView 中查看它是如何完成的: items 属性是一个 ObservableList,它由 ListView Controller 监控,相应地更新 View 。所以 ListView 的用户不知道任何事情,他们可以简单地添加/删除/更改 items 的元素。

关于java - 纸牌游戏中的mvc设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12336593/

相关文章:

javafx - 无法填充在 SceneBuilder 2 中创建的 JavaFX TableView

java - 如何拆分保留空元素的字符串?

javascript - Emberjs - 将参数动态绑定(bind)到 View

model-view-controller - 在 IIS7 上将 *.MVC 映射到 aspnet_isapi.dll

JavaFX TableView 未填充

java - 将参数从 JNLP 传递到 JavaFX2

java - 如何在eclipse中显示日文字符

java - Java 中的位移

java - PVector.random2D() 问题

mysql - .Net Core MVC 表单提交发布到数据库,但 View 抛出错误