What are your favorite ones?
Head First Design patterns [1] I love this book. Always by my side.
[1] http://oreilly.com/catalog/9780596007126/The classic Gang of Four book:
Design Patterns: Elements of Reusable Object-Oriented Software [1]
It's the defining patterns book -- a classic.
[1] http://rads.stackoverflow.com/amzn/click/0201633612Patterns of Enterprise Architecture [1] - Martin Fowler
[1] http://rads.stackoverflow.com/amzn/click/0321127420Design Patterns: Elements of Reusable Object-Oriented Software [1] by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. : the classic GOF (Gang of Four) book, the default choice to start reading.
Pattern Hatching: Design Patterns Applied [2] by John M. Vlissides A great complementary reading for the GOF patterns. Offers 10 myths about patterns, shows how to apply several patterns (drawn from the original 23) in a file system. Also includes some patterns that were left out of the GOF.
Implementation Patterns [3] by Kent Beck and Refactoring to Patterns [4] by Joshua Kerievsky are really useful to match the design process using patterns and the programming issues that patterns can solve at code level.
Some useful pattern books on high level enterprise solutions to recurrent problems that architects face on every project are Patterns of Enterprise Application Architecture [5] by Martin Fowler and the canonical resource to get insight on messaging architectures: Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions [6] by Gregor Hohpe y Bobby Woolf
Great resources to learn how to think in patterns and do correct OOP analysis and design are Analysis Patterns: Reusable Object Models [7] by Martin Fowler and Applying UML and Patterns [8] by Craig Larman. Also I need to mention here Domain-Driven Design: Tackling Complexity in the Heart of Software [9] by Eric Evans, the most valuable book I found to think about the whole software design process.
Finally, my absolute favourite pattern catalog: Organizational Patterns of Agile Software Development [10] by James O. Coplien. This book isn´t about software patterns, is about people, a catalog for creating successful teams. Every manager should read this book!
[1] http://rads.stackoverflow.com/amzn/click/0201633612
I would recommend Refactoring: Improving The Design Of Existing Code [1] 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.
[1] http://rads.stackoverflow.com/amzn/click/0201485672I really liked Refactoring to Patterns [1] for its "before and after" approach to using patterns to solve problems.
[1] http://www.industriallogic.com/xp/refactoring/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 on, 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...
I'm a huge fan of " Holub on Patterns: Learning Design Patterns By Looking At Code [1]." 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.
[1] http://www.holub.com/goodies/patterns/Although it is not exclusively a design pattern book, I would like to recommend Working Effectively With Legacy Code [1]. 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#.
[1] http://rads.stackoverflow.com/amzn/click/0131177052Design 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.
I like the pattern-oriented software architecture (POSA) series.
http://www.amazon.com/Pattern-Oriented-Software-Architecture-System-Patterns/dp/0471958697 [1]
[1] http://rads.stackoverflow.com/amzn/click/0471958697My favorites have already been mentioned above. I'll just add in Uncle Bob's Agile Principles Patterns and Practices. Not just about design patterns, but also about design principles.
Eric Evans' Domain Driven Design is also very good.
Finally, Pattern Languages of Program Design [1]
[1] http://rads.stackoverflow.com/amzn/click/0201607344The obligatory Gang of Four: * Design Patterns: Elements of Reusable Object-Oriented Software* (ISBN 0-201-63361-2) [1] by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides.
[1] http://rads.stackoverflow.com/amzn/click/0201633612Enterprise Integration Patterns [1] is invaluable for being able to intelligently discuss asynchronous messaging architectures.
Not written by Martin Fowler, but part of his "Signature Series".
[1] http://rads.stackoverflow.com/amzn/click/0321200683Head First Design Patterns definately. Really is a well-written way to get one's head into the concepts.
I recommend reading Christopher Alexander's A Pattern Language: Towns, Buildings, Construction [1] 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.
[1] http://rads.stackoverflow.com/amzn/click/0195019199These are books I've personally read and can suggest:
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:
Cheers!
Since no one has mentioned it, I'll throw in my lot with Design Patterns in C# [1]. 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#.)
[1] http://rads.stackoverflow.com/amzn/click/0321126971C# 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.
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.
"Design Patterns Explained" as introduction, wikpedia later.
This is a good website that has design pattern related articles in an easy to understand way:
[1] http://www.dotnetcube.com/?tag=/design-patterns5 Books I found really interesting are listed at my blog : 5 Design Pattern Books you must read [1]
Hope this helps everyone.
[1] http://www.fromdev.com/2010/06/5-best-design-pattern-books-you-must.htmlRefactoring to Patterns [1] is a good book once you have become familiar with patterns.
[1] http://www.industriallogic.com/xp/refactoring/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.
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.
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".
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 [1].
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)
[1] http://en.wikipedia.org/wiki/Design_patternsA good blog is http://blog.cumps.be/design-patterns-strategy-pattern/ which explains design patterns simply.
Undoutedly 'Head First Design Patterns'. Hey, it got a Jolt award too.
I really liked 'Design Patterns in Ruby' too.
A thought for the day: a design pattern is a solution for a problem your environment is forcing upon you
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 [1]
[1] http://rads.stackoverflow.com/amzn/click/1590593804I'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.
It has been a while since I read it but I did like Design Patterns for Object-Oriented Software Development [1] by Wolfgang Pree [2]
[1] http://rads.stackoverflow.com/amzn/click/0201422948If you are doing programming that involves networking or multithreading, I found Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects [1] 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.
[1] http://rads.stackoverflow.com/amzn/click/0471606952In addition to the books referred above, I'd mention Analysis Patterns: Reusable Object Models [1]. 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.
[1] http://rads.stackoverflow.com/amzn/click/0201895420Since 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.
I haven't tried GoF Design Patterns yet but I have recently read Head First Design Patterns [1] and absolutely loved it. This book is the best way to learn design patterns.
[1] http://rads.stackoverflow.com/amzn/click/0596007124http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 [1]
[1] http://rads.stackoverflow.com/amzn/click/0201633612Head First Design pattern and Few websites which gives you how to use the desig patterns practically- cricandcric.com [1]
[1] http://www.cricandcric.comWrox's Professional PHP Design Patterns [1] 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.
[1] http://www.wrox.com/WileyCDA/WroxTitle/Professional-PHP-Design-Patterns.productCd-0470496703.htmlI suggest "Applying UML and Patterns" , it's very good to understand GRASP , a set of useful design guidlines and principles.
According to me following two books are BEST indeed:
Head First Design Patterns. If you want an illustrative book around patterns, you can't go wrong!
The K&R C book.
The Gang of Four book is always a great reference.