Zac*_*ack 5 java oop design-patterns playing-cards
在设计应用设计模式的以下类时,最好的方法是什么?
(MeldPile掌握了桌面上的所有融合.)
对于我来说,我觉得getTopCard
和removeTopCard
只是一个包装getCard
和removeCard
,因为它只是得到一个卡的顶部位置,然后将它传递给getCard
或removeCard
.
我应该使用作文吗?策略模式?或者只是创建另一个名为CardPile的类并将其用作上述类的基类?真的很感激,如果你能提供一个示例代码.
我认为你可以通过下面的单一甲板类实现你想要的东西,这实际上是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);
}
}
Run Code Online (Sandbox Code Playgroud)
我看到的唯一真正的问题是deal()
方法,这是否应该是甲板的责任?我个人不这么认为,这让我想到也许你会有一个Player类和一个Dealer类来扩展Player并实现处理一个套牌的逻辑
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());
}
}
}
// .....
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10736 次 |
最近记录: |