In the approximately ten years since the publication of the seminal work in thefield of design patterns (Gamma et al's Design Patterns), this practice hasmoved from being an esoteric part of computer science research to themainstream of software engineering. Yet despite their widespread acceptance,design patterns are frequently misunderstood. These authors learned patternsthe hard way, and their original aim in writing this book (providing the readerwith a gentle yet thorough introduction to design patterns) continues in thesecond edition. This book is the perfect book to read before the reader tries totackle Gamma's famous work, and has been updated to reflect recent trendsand developments in software design.
The book acts a general object oriented design book, not just for design patterns. It builds a way of thinking towards software design rather than just stating the information.
The book covers the basics of UML and object oriented design, some common patterns, and commonality and variability analysis.
While I was reading it, I didn't think the authors chose a very apt title for the book; after finishing it, I realized that the authors are trying to explain how patterns are derived. In fact, at one point in the book the authors point out that it is much more important that you understand the basic principles of design patterns than it is to memorize patterns and diagrams.
The material is presented clearly with plenty of examples and is easy to read.
If you're looking for a book on patterns, you'd be better off with something like Design Patterns: Elements of Reusable Object-Oriented Software, in fact I think this book would make a good segue to that one.
Anyone who wants to write beautiful, manageable and extendible code must read about design patterns. In this book you are also introduced to OOP. So it is a good start point for the OOP+design patterns beginner.
UPDATE: The second time I read it, it did not felt as good as the first time. I couldn't agree on some points and views of the author. It's better to read "Head First Design Patterns" for DP part and "Object-Oriented design and analysis with application" for the OOP introduction part. Changing my rating from 5 to 4.
After seeing Alan Shalloway speak in person, and enjoying it greatly, I decided to get his book. Having read Design Patterns, I found this book to add fairly little, using a large number of words.
The earlier chapters that present strategies for deriving design patterns from the principles of object oriented programming, and particularly the notion of "encapsulate what varies" are helpful, however.
I was expecting only the "explained" part in "design patterns explained" and I was pleasantly surprised when it talked more on loose coupling, high cohesion and other principles. The book takes you on a roller coaster of information and expands your horizons on a particular subject or a particular pattern. The way it explains individual patterns and the relationships between them was extremely helpful. Unfortunately, it was difficult to focus on the book at times and the main example was starting to get annoying. As much as I enjoyed the process of constructing the code for each pattern I sometimes felt that it was too much, that I forgot where the starting point was and where we were going. There were paragraphs I felt the need to read several times to get the hang of it and I felt the information could've been explained easier.
Very readable and useful as a textbook in a course on Design Patterns. Plenty of real-world examples, with enough attention to basic analysis and design principles and practices.
I think this was the 'just right' introduction to design patterns for me, having done object-oriented programming (OOP) in the industry for about 5 years. I think anyone having done OOP for a couple of years would benefit from it, including recent college graduates.
I really like the way the authors motivate each pattern that they discuss with a case study of sorts and kind of 'discover' the pattern before our eyes. Some of the philosophical and higher level discussions around patterns was a bit hard to grok, but I think this was because it is hard. The authors demonstrate a couple of different yet related ways to derive a design from a given problem and amply caution the reader against the misapplication of patterns. The authors admit that this book is not sufficient to make the reader an expert in how to always apply patterns the Right Way in the design, but I feel that it sets the reader on a good course.
My one-star ding stems from how sloppy the code samples were. Some parts of the code wouldn't have compiled, others would have but were wrong, still others were redundant. It's clear that no editor fluent in Java reviewed them. Then again, this was an issue only in one or two places where I thought the prose was a bit obtuse and I felt the need to look at the code to understand what they're saying.
Another possibly perceived shortcoming is that it does not contain all the patterns in the famous "Gang of Four" book, but this is by design. This book aspires to introduce the concept of patterns, and does a terrific job. They also have a few extra ones on the companion site .
As a last warning, the authors include only Java code snippets in the book proper, which to me is completely fine, since it is clear to me how to achieve the same results in C++, and there is C++ code snippets on the companion site too. I think this kind of partition makes the book flow better.
This book is not just an exegesis to GoF design patterns book, it's much more than that.
This book teaches the right use and right meaning of object oriented programming concepts. For example, in academics, inheritance is taught as a way to extend the behaviour of base class. While this is true from implementation perspective, this narrow definition will lead you to make improper usage of inheritance. It's not uncommon to see developers creating a sub-class for each special case, thereby creating huge inheritance trees and creating maintenance nightmares.
I benefitted a lot from this book, if you aren't a very experienced object oriented designer, you'll benefit from it too. If there's just one thing to take from this book, it's "Commonality and Variability Analysis".
Good introduction to design patterns and some of the higher principles of object-oriented design. Follows my own personal discovery of the fundamental principle of isolating change. I discovered it while I was reading 's , right after I had read the Gang of Four book in 1994.
A good book for junior developers, but I am way beyond it by now.
Good introduction to design patterns and some of the higher principles of object-oriented design. Follows my own personal discovery of the fundamental principle of isolating change. I discovered it while I was reading Wolfgang Pree's Design Patterns for Object-Oriented Software Development, right after I had read the Gang of Four book in 1994.
A good book for junior developers, but I am way beyond it by now.
One of the best books to learn object oriented design. not only design patterns. the way concepts are presented gives the reader the ability to understand the philosophy behind the patterns which improves the design skills. This is not a design patterns catalog so don't expect all patterns to be listed.