--- title: Design Patterns localeTitle: Patrones de diseño --- ## Patrones de diseño Los programadores y arquitectos de software utilizan patrones de diseño para resolver problemas **comunes y recurrentes** en la arquitectura de software. Los patrones proporcionan un enfoque independiente del **lenguaje para la programación orientada a objetos** que ayuda a los desarrolladores a seguir los principios del buen diseño de la aplicación. ### ¿Por qué patrones de diseño? El desarrollo de patrones de diseño ofrece varias ventajas: * Es más fácil seguir buenos principios de programación, como los **[principios de](https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa) [SOLID](https://www.youtube.com/watch?v=XzdhzyAukMM) .** * Mantiene los trozos de código más pequeños para que el código sea más fácil de **probar** y **depurar** * Ayuda a mantener el código acoplado libremente para que el código sea más fácil de **reutilizar** y **actualizar** para nuevas aplicaciones * Hace que el código sea más fácil de **entender** , por lo que los nuevos contribuyentes pueden **aumentar rápidamente** El uso de patrones de diseño conlleva algunas concesiones, y los desarrolladores nuevos en la práctica deben recordar lo siguiente: * No **hay balas de plata** en la programación, y los patrones de diseño no son una excepción * Los patrones de diseño agregan una **capa de abstracción** al código que aumenta el diseño inicial y el esfuerzo de desarrollo * El uso excesivo de los patrones de diseño o forzarlos a adaptarse hace que el código sea **más difícil** de entender ### Ayuda de idioma Los patrones de diseño se originaron en el mundo de los lenguajes de tipo estático como C ++, Java y C #. La mayoría de los recursos sobre desarrollo por patrón de diseño se basan en uno de estos idiomas. No obstante, los patrones de diseño son solo eso: patrones. No son **implementaciones** , como clases o interfaces, y **no** están **restringidas a ningún idioma** . Al aprender patrones de diseño dentro de un lenguaje dinámico, si patrones particulares parecen innecesariamente complejos o contraintuitivos, recuerden sus orígenes. Los desarrolladores en lenguajes dinámicos todavía pueden usar y beneficiarse de los siguientes patrones de diseño, aunque es posible que se requiera más investigación para comprenderlos completamente. ### Usos Los patrones de diseño son excelentes para resolver problemas de codificación fundamentales de una manera simple y repetible. En general, se dividen en tres categorías: * **Los** patrones de **creación** describen cómo crear nuevos objetos. * **Los** patrones **estructurales** describen cómo componer objetos de otros objetos * **Los** patrones de **comportamiento** describen cómo los objetos se comunican entre sí. Todas estas tareas pueden realizarse sin patrones de diseño, pero los patrones de diseño **reducen el riesgo de** que infrinja las buenas prácticas y cree un código que sea difícil de mantener. #### Más información: * Los [patrones de diseño para humanos de](https://github.com/kamranahmedse/design-patterns-for-humans) Kamran Ahmed es una excelente introducción a los patrones específicos. * [Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) es el libro que inició esta práctica. * Los [patrones de arquitectura de aplicaciones empresariales de](https://martinfowler.com/eaaCatalog/) Martin Fowler proporcionan un conjunto de patrones más sofisticados para aplicaciones empresariales * Sourcemaking proporciona un [recurso en línea](https://sourcemaking.com/design_patterns) con ejemplos adicionales e información sobre patrones de diseño