Question

Design a Generic Deck of Cards

Solution

A simple design:

enum Suit {
	HEART, DIAMOND, SPADES, CLUBS;
}

class Deck {
	List<Card> deck;
}

class Card {
	Suit suit;
	int num;
}

A more complex design:

enum Suit {
	HEART, DIAMOND, SPADES, CLUBS;
}

class Deck<T extends Card> {
	List<Card> deck;

	public void shuffle() {
	};
}

abstract class Card {
	boolean available;
	Suit suit;
	int num;

	public boolean isAvailable() {
		return available;
	};
}

class Hand<T extends Card> {
	List<Card> cards;

	public int score() {
		int score = 0;
		for (Card c : cards) {
			score += c.num;
		}
		return score;
	}

	public void addCard(T card) {
		cards.add(card);
	}
}

// Now use the above generic Data Structure to make a
// Blackjack Game
class Blackjack extends Hand<BlackJackCard> {
}

class BlackJackCard extends Card {
}