For anyone who has followed the emergence of software patterns, this text compiles traditional sources of expertise. Its pages contain the "original" 23 patterns defined by Erich Gamma and the so-called "Gang of Four" team that in 1995 published the bestselling Design Patterns: Elements of Reusable Object-Oriented Software. The almanac also gathers the patterns published in the four-volume series Pattern Languages of Design 1 through 4. That's just the tip of the proverbial iceberg here, as this almanac compiles over 700 patterns from other books, magazines (including C++ Report), conferences, papers, and Web sites.
This almanac is organized into about 70 categories of patterns, ranging from "Accounting" to "Writers' Workshops" and including almost everything in between. Each entry gets a short sentence or two of description, additional sources, and cross-references to related patterns. For programmers, there are patterns for C++, Java, and Smalltalk (which gets well over a hundred in number). Because successful project and team management can be difficult, many patterns deal with more effective software design throughout the project's life cycle. Specialized topics include patterns for finite state machines, parallel processing, fire alarms, and even patterns about patterns. (These sections look at some rules for defining new patterns, as well as running conferences and workshops.) Patterns often have short and sometimes evocative names. You'll find it all here, including early patterns like "Facade" and "Observer," as well as more entertaining ones like "Big Ball of Mud" or (our favorite) "George Washington Is Still Dead."
Although browsing through The Pattern Almanac 2000 will not make you an expert on patterns, it will introduce you to a world of expertise on reusable designs. It's a truly valuable reference for any software developer or manager. --Richard Dragan
Topics covered: Reference listing of software patterns, analysis patterns, organizational structures, patterns for effective software design (including user interface design), patterns (and anti-patterns) for team and project management; C++ idioms, history patterns, patterns for multimedia and Web design, Java and Smalltalk patterns, databases, patterns for defining new patterns (and running pattern conferences and workshops), finite state machines, telecommunications, Smalltalk patterns, client-server frameworks, patterns for education, system testing, parallel processing, patterns for cryptography and security.
From the Inside Flap
This book organizes and describes published patterns to help you find the pattern(s) you need. It contains two kinds of patterns: those that stand alone (patterns), and those that work within a collection (subpatterns). The collections may be pattern languages, or they may be patterns published as a unit that solve problems in a particular domain. In other words, collections comprise interdependent patterns that work together to one degree or another. Stand-alone patterns and collections of patterns are generically termed entries of the Almanac.
The first section you encounter, the List of Almanac Entries, is just that: an exhaustive list of all entry titles. Next comes the Categories section, which lists categories of patterns in alphabetical order. Each category is followed by patterns, collections, and experience reports. After Categories comes the heart of the book, the Almanac Entries, containing descriptions of the patterns and collections themselves. Next comes the Bibliography, which contains references for all entries and experience reports. Finally, there is an Index of entries, subpatterns, authors, and citations.
If you know the name of a pattern or collection and want to know more about it, use the List of Almanac Entries. If you're not sure of the exact title but know a key word or two, use the Index. If you're interested in patterns for a given domain, look the domain up in the Categories section. With time, you will develop your own technique for using the Almanac effectively.
I'm sure you'll also discover areas for improvement. If you find that I have missed a book, article, or URL that harbors patterns, by all means let me know. References to publications that show patterns in action are also welcome. And of course, corrections or additions of any kind are greatly appreciated, especially regarding misinterpretation of pattern intent or characterization, misspellings, annoying habits—you name it!
A sticky topic that I hesitated to tackle, at least for now, is pattern evaluation. For those who know Christopher Alexander's work, he labels his patterns with asterisks that indicate how successfully each pattern captures a "deep and inescapable property of a well-formed environment" Alexander+77, xiv. In that vein, I'd love to hear stories about patterns that have or have not worked for you, as well as insights regarding pattern evaluation and categorization. Please send everything to risingl@acm, and thanks in advance for your input! Acknowledgments
This has been an exhilarating project! It couldn't have happened without the hard work of many people—first and foremost, the pattern writers. Thank you all. I am honored to be a proxy for your contributions to the pattern literature.
Thanks to John Vlissides for believing I could really pull this off. He made a significant contribution to the project.
Thanks to Paul Becker, Mike Hendrickson, and Sarah Weaver at Addison-Wesley for their support in bringing the book to fruition.
Thanks to Ross Venables for collating all those files!
Thanks to Luci Crackau for her work on the categories and for allowing me to take over her office.
Thanks to Patrick Chan, the Java Developers Almanac author and Frame guru who has been a tireless co-developer of this book. Thanks also to Arthur Ogawa, TEX wizard, for contributing his valuable skills to the layout.
Thanks to Rosemary Michelle Simpson, indexer extraordinaire, who also made many valuable suggestions for this book.
Thanks to Joel Jones, a former fellow grad student, who jumped in to ferret out experience papers and write up summaries.
Thanks to all the reviewers who spent valuable time coming up with improvements to this work.
Thanks to Charlie Schultz and Jeff Seigel, my original supporters at AG Communication Systems, and to Paul Narula, my most recent coach, for allowing me to spend time on this effort.
Finally, thanks to Karl Rehmer, who reminds me, when I forget, that I have everything I need. Thanks, you dear heart! L.R.