Table of Contents
Preface to Book
Foreword
Guide to Readers
Introduction
• What Is a Design Pattern?
• Design Patterns in Smalltalk MVC
• Describing Design Patterns
• The Catalog of Design Patterns
• Organizing the Catalog
• How Design Patterns Solve Design Problems
• How to Select a Design Pattern
• How to Use a Design Pattern
A Case Study: Designing a Document Editor
• Design Problems
• Document Structure
• Formatting
• Embellishing the User Interface
• Supporting Multiple Look-and-Feel Standards
• Supporting Multiple Window Systems
• User Operations
• Spelling Checking and Hyphenation
• Summary
Design Pattern Catalog
Creational Patterns
• Abstract Factory
• Builder
• Factory Method
• Prototype
• Singleton
• Discussion of Creational Patterns
Structural Patterns
• Adapter
• Bridge
• Composite
• Decorator
• Facade
• Flyweight
• Proxy
• Discussion of Structural Patterns
Behavioral Patterns
• Chain of Responsibility
• Command
• Interpreter
• Iterator
• Mediator
• Memento
• Observer
• State
• Strategy
• Template Method
• Visitor
• Discussion of Behavioral Patterns
Conclusion
• What to Expect from Design Patterns
• A Brief History
• The Pattern Community
• An Invitation
• A Parting Thought
Glossary
Guide to Notation
• Class Diagram
• Object Diagram
• Interaction Diagram
Foundation Classes
• List
• Iterator
• ListIterator
• Point
• Rect
Bibliography
Index
Preface to Book
This book isn't an introduction to object-oriented technology or design. Many
books already do a good job of that. This book assumes you are reasonably
proficient in at least one object-oriented programming language, and you
should have some experience in object-oriented design as well. You
definitely shouldn't have to rush to the nearest dictionary the moment we
mention "types" and "polymorphism," or "interface" as opposed to
"implementation" inheritance.
On the other hand, this isn't an advanced technical treatise either. It's a book
of design patterns that describes simple and elegant solutions to specific
problems in object-oriented software design. Design patterns capture
solutions that have developed and evolved over time. Hence they aren't the
designs people tend to generate initially. They reflect untold redesign and
recoding as developers have struggled for greater reuse and flexibility in their
software. Design patterns capture these solutions in a succinct and easily
applied form.
The design patterns require neither unusual language features nor amazing
programming tricks with which to astound your friends and managers. All can
be implemented in standard object-oriented languages, though they might
take a little more work than ad hoc solutions. But the extra effort invariably
pays dividends in increased flexibility and reusability.
Once you understand the design patterns and have had an "Aha!" (and not just
a "Huh?") experience with them, you won't ever think about object-oriented
design in the same way. You'll have insights that can make your own designs
more flexible, modular, reusable, and understandable—which is why you're
interested in object-oriented technology in the first place, right?
A word of warning and encouragement: Don't worry if you don't understand
this book completely on the first reading. We didn't understand it all on the
first writing! Remember that this isn't a book to read once and put on a shelf.
We hope you'll find yourself referring to it again and again for design insights
and for inspiration.
This book has had a long gestation. It has seen four countries, three of its
authors' marriages, and the birth of two (unrelated) offspring. Many people
have had a part in its development. Special thanks are due Bruce Anderson,
Kent Beck, and André Weinand for their inspiration and advice. We also thank
those who reviewed drafts of the manuscript: Roger Bielefeld, Grady Booch,
Tom Cargill, Marshall Cline, Ralph Hyre, Brian Kernighan, Thomas Laliberty,
Mark Lorenz, Arthur Riel, Doug Schmidt, Clovis Tondo, Steve Vinoski, and