Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
Head First Design Patterns, by Eric Freeman and Elisabeth Robson
Design Patterns in Java™, Second Edition, by Steven John Metsker and William C. Wake