Programming in the Large with Design Patterns is a terrific resource for learning about design patterns. The book starts with a general introduction to all types of programming patterns and goes on to describe 10 of the most popular design patterns in Singleton, Iterator, Adapter, Decorator, State, Strategy, Factory Method, Observer, Facade and Template Method.Each pattern is introduced with a non-technical example or story that illustrates the pattern concept. The details are described with Java code examples and UML diagrams. Each pattern description also includes a discussion section that offers more in-depth information for the curious. For example, the discussion section for Singleton explains why introducing a singleton is only marginally better than using a global variable.
The book is very concise and informative. This is my third book about Design Patterns. Well written and to the point. Author suggests also some good practices and different approaches using pattern like in case of Observer which could be used in two flavours push and pull. Or how to to deal with code smells using Template pattern. The only disadvantage is that book contains only description of most popular and basic Design Patterns. I'm looking now for something more advanced. Gang of four described 23 of them. All in all book is worth reading and keeping for reference.
Good introduction to Design patterns, especially for Java programmers, but it easily portable to other languages. Explain few patterns, though with quality