カードゲームを作ろうとしています。
私が持っているいくつかのクラスは次のとおりです。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);
}
}
}