Fowler. Patterns of Enterprise Application Architecture

Fowler. Refactoring; Improving the Design of Existing Code

Gamma, Helm, Johnson, Vlissides. Design Patterns; Elements of Reusable Object-Oriented Software

Buschmann, Meunier, Rohnert, Sommerlad, Stal. Pattern-Oriented Software Architecture; A System of Patterns

Kerievsky. Refactoring to Patterns

Hunt, Thomas. The Pragmatic Programmer

Martin. Agile Software Development