Design Patterns Explained
"Design Patterns Explained, Second Edition" is a simple, clear, and practical introduction to patterns. Using dozens of new C# and updated Java examples, it shows students how to use patterns to design, develop, and deliver software far more effectively. Students should read this book before they they try and tackle Gamma's well-known work, Design Patterns.
The book starts with a complete overview of the fundamental principles of patterns, and the role of object-oriented analysis and design in contemporary software development. Then, using easy-to-understand sample code, Alan Shalloway and James Trott illuminate dozens of today's most useful patterns: their underlying concepts, advantages, tradeoffs, implementation techniques, and pitfalls to avoid. Many patterns are accompanied by UML diagrams.
Building on their best-selling First Edition, Shalloway and Trott have thoroughly updated this book to reflect new software design trends, patterns, and implementation techniques. Reflecting extensive reader feedback, they have deepened and clarified coverage throughout, and reorganized content for even greater ease of understanding.
Review By: Jan Scott
06/15/2010"Design Patterns Explained" tells us how to avoid reinventing the wheel in software development. Design patterns are object models that are conceptual in nature. Their purpose is not reuse as one would expect, but to guide the design of software, to provide a context.
The book begins with a discussion of object oriented design and of Unified Modeling Language (UML), and continues by describing some of the simpler design patterns and how they might be used in real world situations. UML diagrams are used liberally to demonstrate the object models, and real-life examples serve to demonstrate the concepts. For example, the façade pattern is used to simplify an existing system for which you want to design your own interface. It should be used when you need only a subset of a system to present a new interface for the client of the existing system. The implementation of this pattern would be the definition of a new class or classes that has the required interface.
After describing the basic design patterns, the authors enter a discussion of "thinking in patterns" to solve a problem. They tackle the difficult subject of analysis procedure. This is not a practical to-do discussion, but rather a combination of philosophy and concrete examples in which they use analogies from architecture. They differentiate between design and implementation. Design consists of the patterns themselves, while the implementation is the Java or C code that implements the objects. One especially useful chapter discusses commonality and variability analysis. These are techniques and ways to identify common functions for the purpose of grouping them or different functions for the purpose of splitting them apart. All good designers do this intuitively, but the book shows that this can be learned.
The final part of the book describes more complex design patterns. Most of them are highly conceptual and complex. I felt it was critical to be very familiar with O-O design and to know Java to understand this book.
The authors have organized each chapter well. First is an overview stating the purpose of the chapter and what will be covered. At the end of each chapter is a series of thought-provoking questions designed to test the reader's understanding. Good design is, of course, important to QA. However, I think the book will be more interesting and relevant to O-O developers and architects than to QA engineers.
Don't reinvent the wheel. Build on the work of others. Use design patterns to improve your system design and to refine the way you analyze and solve problems. If you are a developer or an architect with a solid understanding of object-oriented design, this book is for you.