Patterns are distillations of accumulated wisdom, providing a standard jargon and naming the concepts that experienced practitioners apply. The patterns in Design Patterns are among the most useful class-level patterns and are certainly worth learning. This book complements Design Patterns, providing challenges to exercise your understanding of the patterns. This book uses Java in its examples and challenges because of Java's popularity and its future prospects. By working through the challenges in this book, you will learn to recognize and to apply a large portion of the accumulated wisdom of the software community.