Design patterns provide a structure in which problems can be solved. When solving a real problem, you have to consider many small variations of a solution to that problem to see whether any fits a design pattern.
To understand and get used to design patterns is really difficult. It can be done by studying applications of design patterns, not just the patterns. Reading several books with different perspective is really important.
Are you looking for the best design pattern books? Take a look at the following books which I found really valuable in understanding and effectively applying design patterns. I would recommend these books as must read for any software developer regardless of language or background.
Design Patterns: Elements of Reusable Object-Oriented Software
(By: Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides)
As you probably already realized, this book is one of the seminal books on patterns in software development. If you are a professional software developer, you must read this. It isolates 23 of the most common patterns and presents them in detail. This book is popularly known as Gang of Four book (Due to gang of 4 great authors).
This book is not light reading though. The examples are based on heavy-duty design tasks an average programmer doesn't face, like language-parsing, toolkit creation, compiler writing, and the like. It makes one wonder how applicable many of the patterns are to less complex programming tasks.
The PDF version of this book can be downloaded from Gang Of Four eBook
Head First Design Patterns
(By: Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra)
The Gang of Four book laid out the basics. The Head First book goes a lot further. It shows you good and bad way of applying the pattern. It gives strong reasoning behind the pattern.
While reading the Gang of Four book I found it very complicated to memorize the pattern. After reading this book it will be easy to memorize, reproduce and implement the patterns effectively.
Head First Design Patterns book is not just about design patterns. It's also a great introduction to object-oriented programming.
The PDF version of Chapter 3 can be downloaded from Head First Design Patterns eBook Chapter 3
Pattern Hatching: Design Patterns Applied
(By: John M. Vlissides)
Author John Vlissides is a member of the Gang of Four writers. He has an excellent writing style that is very engaging for this type of material. Besides going into some additional design patterns, and some pattern strengths and pitfalls, you get a fascinating behind the scenes look at what went on in the development stages of the original Design Patterns book.
Chapter 2 of this book is a must read where John develops a file system application. This book talks in great detail about which patterns suit best the needs of the application and which do not.
Refactoring to Patterns
(By : Joshua Kerievsky)
This is a good book for the software maintainer. In other words, it addresses 90% or 99% of the work that real programmers do. Just about every other software text on the market assumes that the project just started - the disks are empty and the compiler shrink-wrap is on the floor. I admit, that kind of programming is the most fun. It's just not realistic, though. Most work is rework, the kind demonstrated in this book. This also helps a lot in understanding anti-patterns.
This book does an excellent job of bringing patterns into coding, rather than relegating them just to design discussions. This includes twenty-seven pattern-directed refactorings with real-world code examples.
A PDF version of same book can be downloaded from Refactoring to Patterns eBook
Patterns of Enterprise Application Architecture
(By: Martin Fowler)
Martin Fowler clearly knows the field of Enterprise Application, he speaks with confidence of development experiences with projects that went live. This book covers the best practices of Enterprise Application Architecture. The first half of the book is a discussion of enterprise architecture in general. This book describes a set of patterns that work with a certain kind of application, business apps, but that are applicable to more than one platform.
This book is useful for both J2EE and .NET developers. This is particularly useful when attempting to gain an understanding of how application architectures differ between .NET and J2EE. I found the discussions on concurrency and transactions very valuable. Also if you have really complex business logic, you will find how the patterns presented in this book are useful.
The PDF version of this book can be downloaded from Patterns of Enterprise Application Architecture eBook
Hope you found this list useful, What are the best design patterns books you have read? Please don't forget to share with me in comments.