Los patrones de diseño para los Métodos Orientados a Objetos fueron inicialmente propuestos en 1994 en el libro Design Patterns por 4 autores conocidos como The Gang of Four; Gamma, Helm, Johnson, y Vlissides.

El término patrón fue acuñado para el ámbito de la arquitectura por Christopher Alexander en 1979:

Un patrón describe tanto un problema que ocurre una y otra vez en nuestro entorno así como el núcleo de la solución a dicho problema, de forma que podemos reutilizar la solución sin tener que volver a pensarla otra vez. - Alexander.

Según Alexander, todo patrón tiene:

  1. Contexto.
  2. Problema.
  3. Solución.

En la ingeniería de software, hay patrones de:

  1. Diseño: hay patrones arquitectónicos (estructuras de sistemas), patrones de diseño (microarquitecturas), y patrones de codificación (modismos o idioms).
  2. Análisis: modelos reutilizables de análisis (según Fowler).
  3. Organización.
  4. Proceso.
  5. Específicos al dominio.

Los patrones de diseño ofrecen un vocabulario común para comunicar de manera sencilla un diseño complejo, pero tienen implementaciones distintas y se deben usar con criterio.

Se clasifican en:

  1. Patrones creacionales: abstraen el proceso de instanciación de nuevos objetos. Patrón de Diseño Factory Method, Patrón de Diseño Singleton, Abstract Factory, Builder, Prototype.
  2. Patrones estructurales: componen objetos para lograr estructuras grandes más flexibles. Patrón de Diseño Adapter, Patrón de Diseño Composite, Bridge, Decorator, Facade, Flyweight, Proxy.
  3. Patrones de comportamiento: definen algoritmos y la asignación de responsabilidades a objetos. Patrón de Diseño Observer, Patrón de Diseño Strategy, Chain of Responsibility, Iterator, State, Memento, Visitor, Command. Interpreter, Mediator, Template Method.

Existen muchos más patrones de diseño en el libro Design Patterns, y otros más que se han catalogado en años posteriores. También existen patrones de diseño que no pertenecen al Paradigma Orientado a Objetos, pero siguen al mismo principio de catalogar soluciones flexibles y repetibles a problemas recurrentes.