Patrones de diseño de software

Si todavía no estás familiarizado con el concepto «patrones de diseño» tras leer este artículo conocerás su importancia y probablemente te des cuenta de que ya conoces algunos de ellos. Si ya sabes de que va, te invito a seguir leyendo para refrescar o incluso ampliar conocimientos.

Patrones de siseño de software

Qué son los patrones de diseño

La RAE define patrón como un «Modelo que sirve de muestra para sacar otra cosa igual», una definición muy acertada si la aplicamos al diseño de software.

Los patrones de diseño de software son un conjunto de estrategias de programación diseñadas para dar solución a problemas comunes. Cada patrón se centra en resolver un problema determinado, de forma que disponemos de una solución estándar que garantiza la resolución eficaz de un problema particular.

Podemos decir que existe un catálogo de patrones de diseño de software, aunque hasta dónde he podido investigar, no existe una lista oficial, pero si una serie de comunidades y organizaciones enfocadas en la investigación, aprendizaje, inventariado y comunicación de las mismas. Entre ellas podemos destacar The Hillside Group.

Otro aspecto más a destacar es que los patrones de diseño no son un ente estático, sino que evolucionan atendiendo a los nuevos retos que surgen con los avances en el área de la programación. Así, vemos como cada cierto tiempo se amplia el catálogo de patrones con algunos nuevos.

Un poco de historia

Podemos decir que los patrones de diseño fueron popularizados en la década de los noventa por un grupo de programadores conocido como ‘Gang of Four’ formada por: Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides.

La banda de los cuatro, traducción de Gang of Four, publicaron el libro ‘GoF Design Patterns’ en el año 1990. No obstante, debemos destacar que no fueron los primeros en acuñar el término.

El libro ‘GoF Designa Patterns’ está disponible en OpenLibra bajo licencia Creative Commons Attribution-ShareAlike 3.0.

Beneficios de los patrones de diseño

Estandarizar la estrategia de resolución de algunos problemas comunes aporta varios beneficios, estos son algunos de ellos:

  • Ahorro de tiempo en el planteamiento y el diseño de la solución, pues no es necesario reinventar la rueda.
  • Existencia de extensa documentación.
  • Resultados previsibles y garantizados.
  • Traspaso ágil de conocimientos.
  • Estandarización de vocabulario.
  • Facilidad para obtener soporte comunitario.

Tipos de patrones de diseño

El libro ‘GoF Design Patterns’, definía un total de 23 patrones divididos en tres categorías, pero desde su publicación han pasado casi treinta años, y como hemos comentado hablamos de un ente en constante evolución, así que tanto el numero de patrones como el número de tipologías en los que están segmentados han crecido considerablemente. A día de hoy, podemos dividir los patrones en las siguientes categorías:

  • Patrones creacionales
  • Patrones estructurales
  • Patrones de comportamiento
  • Patrones funcionales
  • Patrones de concurrencia
  • Patrones de arquitectura
  • Patrones de computación distribuida
  • Otros

De las cuales las tres primeras eran las que aparecían en el libro ‘GoF Design Patterns’.

Patrones de diseño

A pesar de no existir un catálogo oficial, a continuación veremos una lista de los principales patrones segmentados según las distintas tipologías que hemos visto.

Pensaba acompañar cada patrón de una breve descripción, pero teniendo en cuenta que mencionaremos más de cien, no acabaría nunca de escribir esta entrada. Así pues, tomaremos esta entrada como introducción e índice para futuros artículos dedicados a patrones de diseño específicos.

Los nombres de los patrones los especificaremos en inglés, aunque muchos de ellos tienen su traducción en castellano.

Patrones de diseño creacionales

  • Abstract factory
  • Builder
  • Dependency injection
  • Factory method
  • Lazy initialization
  • Multiton
  • Object pool
  • Prototype
  • RAII
  • Singleton

Patrones de diseño estructural

  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Delegation
  • Facade
  • Flyweight
  • Front controller
  • Marker interface
  • Module
  • Proxy
  • Twin

Patrones de diseño de comportamiento

  • Blackboard
  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Null object
  • Observer
  • Servant
  • Specification
  • State
  • Strategy
  • Template method
  • Visitor

Patrones de diseño funcional

  • Closure
  • Currying
  • Function composition
  • Functor
  • Monad
  • Generator

Patrones de diseño de concurrencia

  • Active object
  • Actor
  • Balking
  • Barrier
  • Binding properties
  • Coroutine
  • Compute kernel
  • Double-checked locking
  • Event-based asynchronous
  • Fiber
  • Futex
  • Futures and promises
  • Guarded suspension
  • Immutable object
  • Join
  • Lock
  • Messaging
  • Monitor
  • Nuclear
  • Proactor
  • Reactor
  • Read write lock
  • Scheduler
  • Thread pool
  • Thread-local storage

Patrones de diseño de arquitectura

  • ADR
  • Active record
  • Broker
  • Client–server
  • CBD
  • DAO
  • DTO
  • DDD
  • ECB
  • ECS
  • EDA
  • Front controller
  • Identity map
  • Interceptor
  • Implicit invocation
  • Inversion of control
  • Model 2
  • MOM
  • Microservices
  • MVA
  • MVC
  • MVP
  • MVVM
  • Monolithic
  • Multitier
  • Naked objects
  • ORB
  • P2P
  • Publish–subscribe
  • PAC
  • REST
  • SOA
  • Service locator
  • SN
  • SBA
  • Specification

Patrones de diseño de computación distribuida

  • Ambassador
  • Anti-Corruption Layer
  • Bulkhead
  • Cache-Aside
  • Circuit Breaker
  • CQRS
  • Compensating Transaction
  • Competing Consumers
  • Compute Resource Consolidation
  • Event Sourcing
  • External Configuration Store
  • Federated Identity
  • Gatekeeper
  • Index Table
  • Leader Election
  • MapReduce
  • Materialized View
  • Pipes
  • Filters
  • Priority Queue
  • Publisher-Subscriber
  • Queue-Based Load Leveling
  • Retry
  • Scheduler Agent Supervisor
  • Sharding
  • Sidecar
  • Strangler
  • Throttling
  • Valet Key

Otros patrones de diseño

  • Business delegate
  • Composite entity
  • Intercepting filter
  • Lazy loading
  • Mangler
  • Mock object
  • Type tunnel
  • Method chaining

Créditos, referencias y artículos relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *