Design Patterns: Elements of Reusable Object-Oriented Software is a
software engineering book describing recurring solutions to common problems in software design. The book's authors are
Erich Gamma, Richard Helm,
Ralph Johnson and
John Vlissides with a foreword by
Grady Booch. The book is divided into two parts, with the first two chapters exploring the capabilities and pitfalls of object-oriented programming, and the remaining chapters describing 23 classic
software design patterns. The book includes examples in
C++ and
Smalltalk.