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 detail: 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.