卡片游戏中的mvc设计

时间:2012-09-09 04:53:37

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

我正在尝试打牌。

我拥有的一些课程是:CardModel,CardView; DeckModel,DeckView。

甲板模型有一个卡片型号列表,根据MVC,如果我想将卡片发送到卡片组,我可以将卡片模型添加到卡片模型中,卡片视图将添加到卡片视图由事件处理程序。

所以我在DeckModel类中有一个addCard(CardModel m),但如果我想发送一个事件来将该模型的卡片视图添加到卡座视图中,我只知道让模型有一个参考视图。

所以问题是:如果卡片模型和套牌模型必须引用他们的视图类来做到这一点?如果没有,怎么做得更好?

更新,代码:

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);
    }
}
}

1 个答案:

答案 0 :(得分:1)

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

在JavaFX中,下一步支持:ObservableList,属性和绑定。您可以在ListView中查看它是如何完成的:items属性是ObservableList,由ListView控制器监视,相应地更新视图。因此,ListView的用户不了解任何内容,他们只需添加/删除/更改items的元素即可。