In 1994 Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, the "Gang of Four", published Design Patterns: Elements of Reusable Object-Oriented Software with Addison-Wesley. It catalogues 23 patterns in three groups.
| Pattern | In one line |
| Chain of Responsibility | Pass a request along handlers until one deals with it. |
| Command | Turn a request into an object (undo, queues). |
| Interpreter | Evaluate sentences of a small language. |
| Iterator | Walk a collection without exposing its structure. |
| Mediator | Centralise how a group of objects talk to each other. |
| Memento | Capture and restore an object's state. |
| Observer | Notify dependents when something changes (Qt's signals and slots are a form of this). |
| State | Change behaviour when internal state changes. |
| Strategy | Swap interchangeable algorithms. |
| Template Method | Fix an algorithm's skeleton, let subclasses fill steps. |
| Visitor | Add operations to a structure without changing its classes. |
The book's best-known advice: program to an interface, not an implementation, and prefer composition over inheritance. In 2005 the authors received the ACM SIGPLAN Programming Languages Achievement Award.