+package solitaire;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+final class Deck {
+ private static final Suit[] suits = Suit.values();
+ private static final Rank[] ranks = Rank.values();
+
+ private final List<Card> cards;
+
+ Deck() {
+ this.cards = new ArrayList<>(suits.length * ranks.length);
+
+ for (Suit s : suits)
+ for (Rank r : ranks)
+ cards.add(new Card(s, r));
+ }
+
+ void shuffle() {
+ Collections.shuffle(cards);
+ }
+
+ Card draw() {
+ return cards.removeLast();
+ }
+
+ boolean isEmpty() {
+ return cards.isEmpty();
+ }
+
+ @Override
+ public String toString() {
+ if (isEmpty())
+ return "{ }";
+
+ return "{ * }";
+ }
+}