我正在做一個家庭作業,我希望有人能給我一兩個提示,因爲我被卡住了。我有一個使用模型 - 視圖 - 控制器結構的Java遊戲,我需要擴展這個程序。我必須在這個程序中實現觀察者模式。Java:觀察同一類別的很多對象
我在模特里有一個玩家等級和一個經銷商等級(莊家擴展玩家)。我有一個視圖類,其中包含UI所需的所有代碼。 Player類正在實現Observerable接口,而View類正在實現Observer接口。我也有一個名爲PlayGame的控制器。所以View類是觀察者。
我的問題是:當我運行程序時,程序只顯示了經銷商的卡片......而不是玩家。或者有時候是相反的 - 程序顯示玩家的牌,但不顯示經銷商的牌......所以我應該怎麼做才能使我的程序「看到」莊家的手和玩家的手?我會感謝任何幫助或提示如何解決這...
我知道如何觀察者模式的作品,但由於某種原因,我不知道如何讓它「觀察」同一類的兩個對象。我需要讓它觀察Player類中的兩個不同對象(我將經銷商和玩家統計爲同一類型,因爲經銷商正在擴展玩家類)。
下面的代碼:
Player類:
public class Player implements Observable{
private List<Card> m_hand;
private ArrayList<Observer> handOfCards;
public Player()
{
m_hand = new LinkedList<Card>();
handOfCards = new ArrayList<Observer>();
}
public void DealCard(Card a_addToHand)
{
m_hand.add(a_addToHand);
notifyObservers();
}
public void addObserver(Observer o) {
handOfCards.add(o);
}
public void notifyObservers() {
for(Observer o : handOfCards){
o.update(m_hand, this);
}
}
的經銷商類擴展播放器類,它有擊中,站立等
在一些額外的方法視圖類我有這種更新方法:
private List<Card> playerHand = new LinkedList<Card>();
public void update(List<Card> m_hand) {
playerHand = m_hand;
}
在控制器中,我有th是:
a_view.DisplayWelcomeMessage();
a_game.getPlayer().addObserver(a_view);
a_game.getDealer().addObserver(a_view);
a_view.DisplayDealerHand(a_game.GetDealerHand(), a_game.GetDealerScore());
//This method below should show player's cards, but it shows dealer's card
a_view.DisplayPlayerHand(a_game.GetPlayerHand(), a_game.GetPlayerScore());
再次,感謝您的任何幫助......我只是不知道如何解決這個問題。
哪裏是實現'Observer'類?好的,我看到它是「視圖」類。你需要一個'update'方法,它有兩個參數,一個'Observable'和一個'Object',以匹配[this](http://docs.oracle.com/javase/8/docs/api/java/util/ Observer.html#update-java.util.Observable-java.lang.Object-)方法。 – ajb 2014-10-29 20:36:59