我認爲你可以用下面這樣一個單一的甲板類實現你想要的東西,這實際上是一個圍繞Stack的包裝,我不明白爲什麼任何特定的甲板/樁/手不想要大多數,如果不是全部相同方法。
class Deck {
private Stack<Card> cards = new Stack<Card>();
public Deck() { }
public Deck(int numberOfCards) {
for (int i=0; i<numberOfCards; i++) {
cards.push(CardFactory.createCard(i));
}
}
private void shuffle() {
Collections.shuffle(this.cards);
}
public void sort() {
Collections.sort(this.cards);
}
public void removeAllCards() {
this.cards.removeAllElements();
}
public void removeCard(Card c) {
int i = this.cards.search(c);
this.cards.remove(i);
}
public Card getCard(Card c) {
int i = this.cards.search(c);
return this.cards.get(i);
}
public Card getTopCard() {
return this.cards.pop();
}
public Card getNthCard(int i) {
return this.cards.get(i);
}
public Card addCard(Card c) {
this.cards.push(c);
}
}
唯一真正的問題,我看到的是與deal()
方法以及是否這應該是一個甲板的責任?我個人不這麼認爲,這讓我覺得,也許你將有一個播放器類和擴展播放器並實現處理甲板
class Player() {
protected String name;
protected Deck hand = new Deck();
public void addCard(Card c) {
this.hand.addCard(c);
}
// .....
}
class Dealer() extends Player {
private Deck deck;
public Dealer(int deckSize) {
this.deck = new Deck(deckSize);
}
public void deal(Player[] players, int numberOfCards) {
for (player in players) {
for (int i=0; i<numberOfCards; i++) {
player.addCard(this.deck.getTopCard());
}
}
}
// .....
}
最好的方法的邏輯經銷商類是剛開始寫的遊戲規則,讓你的設計自然演變。如果您有特定的問題,例如「我正試圖實施一項規則,如果一名球員在打一張牌時另一名球員必須放棄,我應該在這裏使用什麼樣的模式?」這可能是可以回答的。 – 2012-02-06 13:58:38
+1爲「讓您的設計自然演化」 – radarbob 2012-02-07 20:33:41
請注意將「自然發生」類放入次原子粒子基類中。由於進行不必要的通用和無償處理,類層次結構可能會變得太深。如果你的*自然設計進化*需要一個更一般的基礎來獲得新的功能,你可以在以後總是重構。 – radarbob 2012-02-07 20:40:08