What are your favorite ones?
The classic Gang of Four book:
Design Patterns: Elements of Reusable Object-Oriented Software
It's the defining patterns book -- a classic.
I'm a huge fan of "Holub on Patterns: Learning Design Patterns By Looking At Code." It's a fantastic distillation of the Gang of Four book that is easily applicable to daily development tasks.
Unlike some other books on the topic, this book goes over real-world examples and walks you through a series of design decisions that seem sound enough to address the problem, but have absolutely disastrous implications that you might not consider.
The book is primarily Java-oriented, but the concepts still apply regardless of language.
The obligatory Gang of Four: * Design Patterns: Elements of Reusable Object-Oriented Software* (ISBN 0-201-63361-2) by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides.
I really liked Refactoring to Patterns for its "before and after" approach to using patterns to solve problems.
Undoutedly 'Head First Design Patterns'. Hey, it got a Jolt award too.
I really liked 'Design Patterns in Ruby' too.
I like the pattern-oriented software architecture (POSA) series.
http://www.amazon.com/Pattern-Oriented-Software-Architecture-System-Patterns/dp/0471958697
Head First Design Patterns. If you want an illustrative book around patterns, you can't go wrong!
A thought for the day: a design pattern is a solution for a problem your environment is forcing upon you
I'll vote up the Head First Design Patterns book, but I just wanted to add...
This is a wonderful, funny and educative book that made me think about Object Oriented programming in a whole new way.
You can tell it's going to be a good book early one, where a picture of a tiger is accompanied with the caption
This is a tiger, your brain thinks this is important
Between the people that wrote that and Charles Petzold you could interest anyone in programming...
Enterprise Integration Patterns is invaluable for being able to intelligently discuss asynchronous messaging architectures.
Not written by Martin Fowler, but part of his "Signature Series".
Head First Design patterns! I love it explain the concept of the pattern in a visual and funny way that help me understand it a lot better.
This one is more oriented to PHP but it's very good and talks something about design patterns: PHP 5 Objects, Patterns, and Practice by Matt Zandstra
I'm currently reading APPLYING UML AND PATTERNS. Quite a good book for starting to learn about Unified Process and to get an introduction about design patterns.
Head First Design Patterns definately. Really is a well-written way to get one's head into the concepts.
I would recommend Refactoring: Improving The Design Of Existing Code by Martin Fowler, a really pleasant and useful book which has a soothing, reassuring quality. It makes code fold and unfold in front of you as it was the simplest thing in the world, and lets you see the light through the tangled fabric of the thousands of lines of spaghetti code you are struggling with every single day. The refactoring patterns help a lot in understanding anti-patterns and design patterns.
I'd have to agree with Head First Design Patterns being the best one to read. It's witty, entertaining and informative. It made learning design patterns fun and easy. The GoF book, of course, is the ur-text, but it was difficult for me to read and easy book for me to put down. So, if you're interested in learning many (but not all) the GoF patterns without the tedium, I'd recommend Head First Design Patterns.
Patterns of Enterprise Application Architecture is another great book on patterns. It's very informative and easier to read than the GoF book, though much more serious than the Head First book.
I recommend reading Christopher Alexander's A Pattern Language: Towns, Buildings, Construction first.
After that, many of the software patterns books mentioned above are fine, but you need to understand that software patterns have to fit the environment well, and cannot just be shoehorned in. Because of this, a book can only go so far. A book can't look at your system and see where the patterns fit to resolve the system of forces made up by the requirements.
The patterns books can only open your eyes and provide examples you may not have thought of - they can't really provide solutions.
It has been a while since I read it but I did like Design Patterns for Object-Oriented Software Development by Wolfgang Pree
Since no one has mentioned it, I'll throw in my lot with Design Patterns in C#. It covers the same patterns as the GoF book, and uses a consistent set of examples. Most of all, though, it has questions at the end of each chapter, and answers in the back. Take these tests seriously, and you'll "get it." (You'll also learn a few surprising nuances about C#.)
C# 3.0 Design Patterns is really good if you're looking for something .NET-related. It's short and to the point, with lots of examples. It also makes use of the new C# 3.0 features and LINQ.
Although it is not exclusively a design pattern book, I would like to recommend Working Effectively With Legacy Code. An excellent book for trying to make a legacy code base manageable. It is very well written with code examples in C, C++, Java and C#.
This is not a book, but I like it because it available for free on the web.
Bob Tarr's CMSC446 Introduction To Design Patterns.
http://userpages.umbc.edu/~tarr/dp/spr06/cs446.html
Scroll down to "Lecture Notes".
If you are doing programming that involves networking or multithreading, I found Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects to be very useful.
Lots of good patterns in there to separate out the tricky asynchronous behaviour of concurrency from the rest of the application logic.
Without kidding, I find Wikipedia is the best place to read about patterns. To get the best overall perspective on patterns you can start from here.
Besides in my own experience I apply many patterns from other fields besides computing. Biology and Sociology are especially useful for server patterns like redundancy, specialization, layered development, all (of course might as well forget about stuff like neural nets and all that crazy stuff, because you'll waste more time on it than you'll gain)
Object Oriented Software Construction by Bertrand Meyer is also very good book. Contains practical Design Principles and introduces the Design By Contract methodology. Wikipedia is also very good source to get overall picture and code implementations in different languages. http://www.vincehuston.org/dp/ is a great site to know about all patterns. contains useful lines from GOF book.
Applying Domain-Driven Design and Patterns by Jimmy Nilsson.
In addition to the books referred above, I'd mention Analysis Patterns: Reusable Object Models. Although the patterns described inside are highly domain-specific, the whole book is a fascinating walk through the process of creating a pattern language, explaining the various tradeoffs involved, demonstrating ways for evolving software and accommodating new requirements and balancing simplicity vs rich functionality.
Since no one has mentioned it, I liked "Enterprise Solution Patterns" from MS PnP group. It does not describe many of GoF patterns, but whatever pattern it touches it does the best job.
It is not just bunch of patterns described using UML and in academic way. It describes the real life problem,scenarios and then the solution. Another good part is, it has C# code.
Design Patterns Explained, by Allan Shalloway.
This book is very different from other design pattern books because it is not so much a catalog of patterns, but primarily presents a way of decomposing a problem space that maps easily to patterns.
Problems can be decomposed into two parts: things that are common and things that vary. Once this is done, we map the common things to an interface, and the things that vary to an implementation. In essence, many patterns fall into this "pattern".
For example in the Strategy pattern, the common things are expressed as the strategy's context, and the variable parts are expressed as the concrete strategies.
I found this book highly thought provoking in contrast with other pattern books which, for me, have the same degree of excitement as reading a phone book.
These are books I've personally read and can suggest:
- Design Patterns: Elements of Reusable Object-Oriented Software by Gamma, Helm, Jonson and Vlissides. EAN: 978-0201633610
- Pro JavaScript Design Patterns by Harmes and Diaz. EAN: 978-1590599082
- Head First Design Patterns. EAN: 9780596007126
- Pattern-Oriented Software Architecture, Volumes 1 through 5. Multiple EANs
However, when looking at design patterns, sometimes it's fun to look outside of software to find interesting use of patterns everywhere. That being said I think there is a lot to learn from:
- Chaos: Making a New Science, by Gleick. EAN: 978-0140092509
- The Design of Everyday Things by Norman. EAN: 978-0465067107
- Linked: How Everything Is Connected to Everything Else and What It Means. EAN: 978-0452284395
- Turtles Termites and Traffic Jams by Resnick. EAN: 978-0262680936
Cheers!
A good blog is http://blog.cumps.be/design-patterns-strategy-pattern/ which explains design patterns simply.
This is a good website that has design pattern related articles in an easy to understand way:
I haven't tried GoF Design Patterns yet but I have recently read Head First Design Patterns and absolutely loved it. This book is the best way to learn design patterns.
Head First Design pattern and Few websites which gives you how to use the desig patterns practically- cricandcric.com
Wrox's Professional PHP Design Patterns by Aaron Saray is a great resource for all PHP developers. It's great in a sense that all examples are PHP codes that easier to understand than C++ (in contrast to the book) and beyond the reference material also provides a design case study that helps to understand while watching a real world application when and which patterns to apply.
5 Books I found really interesting are listed at my blog : 5 Design Pattern Books you must read
Hope this helps everyone.