Saltar al contenido principal

Patrones de diseño

Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software.

A continuación, mostramos una clasificación de tipos de patrones y, para cada tipo, algún ejemplo de patrón de diseño.

Patrones creacionales

Los patrones creacionales solucionan problemas de creación de instancias. Nos ayudan a encapsular y abstraer dicha creación.

  • Object Pool: crea un conjunto de objetos inicializados preparados para su uso, en lugar de crearlos bajo demanda. Es útil cuando la creación de estos objetos es costosa. Por ejemplo, al crear un objeto que gestiona una conexión con una base de datos.
  • Abstract Factory: permite trabajar con objetos de distintas familias de modo que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando. Muy usado en la creación de interfaces gráficas.
  • Builder: abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.
  • Factory: centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la diversidad de casos particulares que se pueden prever.
  • Singleton: garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia. Restringe la instanciación de una clase a un solo objeto.
  • MVC: Conocido como modelo-vista-controlador. Es un patrón de arquitectura que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario y el módulo de gestionar los eventos y comunicaciones. Este patrón formula la separación en 3 capas: la capa modelo, que representa la realidad; la capa controlador que conoce los métodos y atributos del modelo, recibe y realiza lo que el usuario quiere hacer; y la capa vista, que muestra un aspecto del modelo y es utilizada por la capa anterior para interactuar con el usuario.

Patrones estructurales

Los patrones estructurales se centran en cómo las clases y los objetos se componen para formar estructuras más grandes y flexibles, facilitando la reutilización y el mantenimiento del código.

  • Adapter: adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría.
  • Composite: permite tratar los objetos compuestos como si de un simple se tratase.
  • Decorator: añade funcionalidad a una clase dinámicamente.
  • Proxy: proporciona un intermediario de un objeto para controlar su acceso.
  • DAO (Data Access Object): separa la lógica de acceso a datos de la lógica de negocio, proporcionando una interfaz abstracta para interactuar con la base de datos.

Patrones de comportamiento

Ofrecen soluciones respecto a la interacción y responsabilidades entre clases y objetos, así como los algoritmos que encapsulan.

  • Iterator: permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.
  • Observer: Define una dependencia uno a muchos entre objetos, de modo que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
  • Strategy: Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.