Required Reading for Any Serious Java Developer
A must, with over 40 patterns, complete with examples, UML diagrams, and clear, concise explanations.
Ever since the Group of Four introduced the idea of categorizing programming Patterns, the software industry’s been buzzing. Researchers and developers have seen the strength of documenting common solutions to various problems, presenting these in growing collections that help us catalogue the many techniques which have served us so well over the years. There’s something to learn here for even the most experienced programmers who may recognize a number of patterns, but are certain to pick up a few new tricks along the way. "Patterns in Java, Volume 1" is the first of what may be a growing series, one well worth the small investment required to join the enlightened crowd.
Each pattern presented in the book follows a basic structure. Chapter 1, "Introduction to Software Patterns", covers each of the areas presented in the book. These include the pattern name, synopsis, context, forces, solution, consequences, implementation, usage, examples and related patterns. Chapter 1 concludes with a brief history of the pattern movement and a quick overview of the material to follow. To make the patterns more accessible, Chapter 2 provides an "Overview of UML". Universal Modeling Language is clearly the most effective diagramming and software modeling vehicle of our time. This chapter provides a high-level explanation and goes into enough detail to put UML well within the reach of any interested reader. The patterns presented in the book use UML to diagram each solution. Chapter 3, looks at the "Software Life Cycle", a nice refresher course on effective development processes.
The Catalog runs from Chapters 4 to 9 and covers 5 "Fundamental Design Patterns", 6 "Creational Patterns", 3 "Partitioning Patterns", 9 "Structural Patterns", 11 "Behavioral Patterns" and 7 "Concurrency Patterns". For those who’ve read Doug Lee’s "Concurrent Programming in Java", most of the concurrency patterns will be familiar. Each pattern is explored in detail, complete with code examples, also bundled on the accompanying CD.
I found each pattern worth careful study and picked up something worthwhile from each and every one of them. Patterns provide a vocabulary for effective communication. While many of the concepts are familiar to experienced programmers, the nomenclature and application to object-oriented programming, and Java in particular, are both instructive and useful. It’s effectively much easier to talk about a Factory pattern, for example, than to explain the concept to others on your team at varying intervals. The shared understanding that comes with patterns and their Java implementations, brings a great deal of value to the development process and affects your ability to be more productive.
Mark Grand has put together a great book and laid the foundation for useful future volumes. Though some of the entries are weaker than others, the books holds together well and the writing style is clear and generally effective. The references to existing Java patterns from the core API help developers see the patterns in a familiar context. This is true of at least a dozen patterns covered in the catalog. The UML diagrams are helpful and the example code helps clarify the application of a given pattern. More importantly, however, the discussion of context and consequences for each of the patterns helps bring the concepts into focus. In my view, this books should be required reading for any serious Java developer.