This is a book about programming in an object -oriented way and about how to use design patterns to solve commonplace problems in object-oriented systems. I've based this book on the philosophy that the best way to learn and understand the design patterns is to see them in action, all jumbled up, just as they occur in the real world. Consequently, this book presents design patterns to you by looking at computer programs. My intent is to both clarify and bring down to earth Gamma, Helm, Johnson, and Vlissides's seminal work Design Patterns: Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995). (The four authors are often called the Gang of Four [or GoF], and their book is usually called the Gang-of-Four book.) The current volume puts the GoF book into context, presenting and teaching design patterns as they occur in the real world. By the time you're done, you'll have seen all of the Gang-of-Four patterns but in the context of real computer programs. Don't get me wrong-this book does not pretend to supplant the GoF book but rather to complement it. Gamma, Helm, Johnson, and Vlissides made an enormous contribution to the 00-design community with their work, and this book certainly wouldn't exist without it. The GoF approach is abstruse and dense to many programmers, however, thus the need for the current volume.