Un patrón de diseño de software describe una solución reutilizable para un comportamiento comúnmente necesario en el software . [ 1 ] Un patrón de diseño no es una estructura rígida que se copie directamente en el código fuente . Más bien, es una descripción y una plantilla para resolver un tipo particular de problema que se puede utilizar en muchos contextos diferentes, incluidos distintos lenguajes de programación y plataformas informáticas . [ 2 ] Los patrones de diseño pueden considerarse como buenas prácticas formalizadas que el programador puede utilizar para resolver problemas comunes al diseñar software.
Los patrones de diseño orientados a objetos suelen mostrar relaciones e interacciones entre clases u objetos , sin especificar las clases u objetos finales de la aplicación que intervienen. Los patrones que implican estado mutable pueden no ser adecuados para lenguajes de programación funcional . Algunos patrones pueden resultar innecesarios en lenguajes que cuentan con soporte integrado para resolver el problema que intentan solucionar, y los patrones orientados a objetos no son necesariamente adecuados para lenguajes no orientados a objetos. [ 3 ]
Historia
Los patrones se originaron como un concepto arquitectónico por Christopher Alexander ya en 1977 en A Pattern Language (cf. su artículo, "The Pattern of Streets", JOURNAL OF THE AIP, septiembre de 1966, vol. 32, n.° 5, págs. 273-278). En 1987, Kent Beck y Ward Cunningham comenzaron a experimentar con la idea de aplicar patrones a la programación, específicamente a los lenguajes de patrones , y presentaron sus resultados en la conferencia OOPSLA de ese año. [ 4 ] [ 5 ] En los años siguientes, Beck, Cunningham y otros dieron seguimiento a este trabajo.
Los patrones de diseño ganaron popularidad en la informática tras la publicación en 1994 del libro Design Patterns: Elements of Reusable Object-Oriented Software por el llamado "Gang of Four" (Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides), a menudo abreviado como "GoF". [ 6 ] Ese mismo año se celebró la primera Pattern Languages of Programming Conference, y al año siguiente se creó el Portland Pattern Repository para la documentación de patrones de diseño.
Although design patterns have been applied practically for a long time, formalization of the concept of design patterns languished for several years.[7]
Practice
Design patterns can speed up the development process by providing proven development paradigms.[8] Effective software design requires considering issues that may not become apparent until later in the implementation. Freshly written code can often have hidden, subtle issues that take time to be detected – issues that sometimes can cause major problems down the road. Reusing design patterns can help to prevent such issues,[9] and enhance code readability for those familiar with the patterns.
Software design techniques are difficult to apply to a broader range of problems. Design patterns provide general solutions, documented in a format that does not require specifics tied to a particular problem.[10]
In 1996, Christopher Alexander was invited to give a Keynote Speech to the 1996 OOPSLA Convention. Here he reflected on how his work on Patterns in Architecture had developed and his hopes for how the Software Design community could help Architecture extend Patterns to create living structures that use generative schemes that are more like computer code.
Motif
A pattern describes a design motif, also known as a prototypical micro-architecture, as a set of program constituents (e.g., classes, methods...) and their relationships. A developer adapts the motif to their codebase to solve the problem described by the pattern. The resulting code has structure and organization similar to the chosen motif.
Domain-specific patterns
Efforts have also been made to codify design patterns in particular domains, including the use of existing design patterns as well as domain-specific design patterns. Examples include user interface design patterns,[11]information visualization,[12] secure design,[13] "secure usability",[14]web design[15] and business model design.[16]
The annual Pattern Languages of Programming Conference proceedings include many examples of domain-specific patterns.[17]
Object-oriented programming
Los patrones de diseño orientados a objetos suelen mostrar las relaciones e interacciones entre clases u objetos , sin especificar las clases u objetos finales de la aplicación involucrados. Los patrones que implican estado mutable pueden no ser adecuados para lenguajes de programación funcional . Algunos patrones pueden resultar innecesarios en lenguajes que cuentan con soporte integrado para resolver el problema que intentan solucionar, y los patrones orientados a objetos no son necesariamente adecuados para lenguajes no orientados a objetos.
Ejemplos
Los patrones de diseño se pueden organizar en grupos según el tipo de problema que resuelven.
Creación
Un patrón de creación crea objetos.
Estructural
Un patrón estructural organiza clases y objetos para formar estructuras más grandes que proporcionan nuevas funcionalidades.
Conductual
Un patrón de comportamiento describe la colaboración entre objetos.
Concurrencia
Un patrón de concurrencia admite el procesamiento simultáneo .
Documentación
La documentación de un patrón de diseño describe el contexto en el que se utiliza, las fuerzas dentro de ese contexto que el patrón busca resolver y la solución sugerida. [ 31 ] No existe un formato único y estándar para documentar patrones de diseño. En cambio, diferentes autores de patrones han utilizado diversos formatos. Sin embargo, según Martin Fowler , ciertas formas de patrones se han vuelto más conocidas que otras y, en consecuencia, se han convertido en puntos de partida comunes para nuevos esfuerzos de escritura de patrones. [ 32 ] Un ejemplo de un formato de documentación de uso común es el utilizado por Erich Gamma , Richard Helm , Ralph Johnson y John Vlissides en su libro Design Patterns . Contiene las siguientes secciones:
- Nombre
- Un nombre descriptivo y único que ayuda a identificar y referirse al patrón.
- Intención
- Una descripción del objetivo que subyace al patrón y la razón para utilizarlo.
- También conocido como
- Otros nombres para el patrón.
- Motivación
- Un escenario que consta de un problema y un contexto en el que se puede utilizar este patrón.
- Aplicabilidad
- Situaciones en las que este patrón es utilizable; el contexto para el uso del patrón.
- Estructura
- Representación gráfica del patrón. Para ello, se pueden utilizar diagramas de clases y diagramas de interacción .
- Participantes
- Una lista de las clases y objetos utilizados en el patrón y sus funciones en el diseño.
- Colaboración
- Una descripción de cómo interactúan entre sí las clases y los objetos utilizados en el patrón.
- Consecuencias
- Una descripción de los resultados, los efectos secundarios y las ventajas e inconvenientes derivados del uso de este patrón.
- Implementación
- Una descripción de una implementación del patrón; la parte de la solución del patrón.
- Código de ejemplo
- Un ejemplo de cómo se puede utilizar este patrón en un lenguaje de programación.
- Usos conocidos
- Ejemplos de usos reales del patrón.
- Patrones relacionados
- Otros patrones que guardan alguna relación con el patrón; análisis de las diferencias entre el patrón y patrones similares.
Crítica
Algunos sugieren que la necesidad de un patrón de diseño puede ser un indicio de que falta una característica en un lenguaje de programación. Peter Norvig demuestra que 16 de los 23 patrones del libro Design Patterns (que se centra principalmente en C++) se simplifican o eliminan (mediante soporte directo del lenguaje) en Lisp o Dylan . [ 33 ] Hannemann y Kiczales (2002) hicieron observaciones similares al implementar varios de los 23 patrones de diseño utilizando un lenguaje de programación orientado a aspectos (AspectJ) y demostraron que se eliminaron las dependencias a nivel de código de las implementaciones de 17 de los 23 patrones de diseño y que la programación orientada a aspectos podría simplificar las implementaciones de patrones de diseño. [ 34 ] Véase también el ensayo de Paul Graham «La venganza de los nerds». [ 35 ]
El uso inapropiado de patrones puede aumentar innecesariamente la complejidad. [ 36 ]
Por definición, un patrón debe programarse de nuevo en cada aplicación que lo utilice. [ 37 ] Dado que algunos autores consideran esto un retroceso respecto a la reutilización de software proporcionada por los componentes , los investigadores han trabajado para utilizar herramientas de programación genérica para convertir patrones en componentes, en un proceso denominado componentización . [ 38 ] [ 39 ] Meyer y Arnout (2006) lograron proporcionar componentización total o parcial de dos tercios de los patrones que intentaron. [ 40 ]
Para lograr flexibilidad, los patrones de diseño pueden introducir niveles adicionales de indirección , lo que puede complicar el diseño resultante y disminuir el rendimiento en tiempo de ejecución .
Relacionado
Los siguientes conceptos son similares en su naturaleza general, pero difieren de los patrones de diseño de software: [ 41 ] [ 42 ] [ 19 ] [ 43 ]
- Patrón de arquitectura de software
- Una solución reutilizable y probada para un problema recurrente a nivel de sistema, que aborda preocupaciones relacionadas con la estructura general, las interacciones de los componentes y los atributos de calidad del sistema. [ 44 ] Los patrones de arquitectura de software operan en un nivel de abstracción superior al de los patrones de diseño, resolviendo desafíos más amplios a nivel de sistema. Si bien estos patrones suelen afectar las preocupaciones a nivel de sistema, la distinción entre patrones arquitectónicos y estilos arquitectónicos a veces puede ser difusa. Ejemplos incluyen Circuit Breaker . [ 41 ] [ 42 ] [ 19 ]
- Estilo de arquitectura de software
- Una organización estructural de alto nivel que define la organización general del sistema, especificando cómo se organizan los componentes, cómo interactúan y las restricciones sobre esas interacciones. Los estilos de arquitectura suelen incluir un vocabulario de tipos de componentes y conectores, así como modelos semánticos para interpretar las propiedades del sistema. Estos estilos representan el nivel más general de organización del sistema. Algunos ejemplos son la arquitectura en capas , los microservicios y la arquitectura orientada a eventos . [ 41 ] [ 42 ] [ 19 ]
- Patrón de implementación
- Beck distingue entre patrones de diseño, que generalmente describen las relaciones entre clases, y patrones de implementación , que a menudo se limitan a una sola clase. [ 45 ] Partiendo de esto, Iglberger (2022) define un patrón de implementación como un modismo de programación que no introduce una abstracción y, por lo tanto, reside en el nivel de los detalles de implementación. [ 46 ] Por esta razón, suelen ser específicos del lenguaje de implementación, con copy-and-swap y RAII como ejemplos en C++, [ 43 ] aunque en otros lenguajes, tales modismos pueden constituir verdaderos patrones de diseño. [ 47 ]
Véase también
- Principio de abstracción
- Esqueleto algorítmico
- Antipatrón
- Patrón arquitectónico
- Patrón de protocolo canónico
- Patrones de depuración
- Patrón de diseño
- patrones de diseño distribuidos
- Marco de arquitectura empresarial
- GRASP (diseño orientado a objetos)
- Clase de ayudante
- Patrón de diseño de interacción
- Lista de estilos y patrones de arquitectura de software
- Lista de filosofías de desarrollo de software
- Lista de temas de ingeniería de software
- Lenguaje de patrones
- Teoría de patrones
- Patrones pedagógicos
- Repositorio de patrones de Portland
- Modismo de programación
- Refactorización
- Metodología de desarrollo de software
Referencias
Citas
- ↑ Alexandrescu, Andrei (2001). Diseño moderno de C++: Programación genérica y patrones de diseño aplicados . Addison–Wesley. pág. xviii. ISBN 978-0-201-70431-0.
- ↑ Horner, Mark (2005). "Patrones" . Estándares de código y diseño Pro .NET 2.0 en C# . Apress. págs. 171–181 . ISBN 978-1-59059-560-2.
- ↑ Cecilia, Jean (10 de junio de 2026). "El cambio ontológico de la arquitectura de software: la relevancia de los patrones de diseño en los lenguajes de programación modernos" . Recuperado el 10 de junio de 2026 .
- ↑ Smith, Reid (1987). "Panel sobre metodología de diseño: Sesión del panel OOPSLA '87" . ACM SIGPLAN Notices . 23 (5). Association for Computing Machinery . doi : 10.1145/62138.62151 .
Ward advirtió sobre la necesidad de programar demasiado en lo que denominó "el alto nivel de los magos". Señaló que un "lenguaje de patrones" escrito puede mejorar significativamente la selección y aplicación de abstracciones. Propuso un "cambio radical en la carga del diseño y la implementación" basando la nueva metodología en una adaptación del trabajo de Christopher Alexander en lenguajes de patrones y que los lenguajes de patrones orientados a la programación desarrollados en
Tektronix
han ayudado significativamente sus esfuerzos de desarrollo de software.
- ↑ Beck, Kent ; Cunningham, Ward (septiembre de 1987). Uso de lenguajes de patrones para programación orientada a objetos . Taller OOPSLA '87 sobre especificación y diseño para programación orientada a objetos . Recuperado el 26 de mayo de 2006 .
- ↑ Beck et al. (1996) , págs. 104, 106.
- ↑ Baroni, Aline Lucía; Guéhéneuc, Yann-Gaël; Albin-Amiot, Hervé (junio de 2003). Formalización de patrones de diseño (Reporte). Informe técnico de la REM. Nantes : Escuela Nacional Superior de Técnicas Industriales y Minas de Nantes. CiteSeerX 10.1.1.62.6466 . S2CID 624834 – vía ResearchGate.
- ↑ Bishop, Judith (diciembre de 2007). Patrones de diseño de C# 3.0 . O'Reilly Media. ISBN 978-0596527730.
- ↑ Tiako, Pierre F. (31 de marzo de 2009). "Modelado formal y especificación de patrones de diseño mediante RTPA" . En Tiako, Pierre F. (ed.). Aplicaciones de software: conceptos, metodologías, herramientas y aplicaciones . pág. 636. doi : 10.4018/978-1-60566-060-8 . ISBN 9781605660615.
- ↑ Beck et al. (1996) , pág. 109.
- ↑ Laakso, Sari A. (16 de septiembre de 2003). "Colección de patrones de diseño de interfaz de usuario" . Universidad de Helsinki, Departamento de Ciencias de la Computación . Recuperado el 31 de enero de 2008 .
- ↑ Heer, J.; Agrawala, M. (2006). "Patrones de diseño de software para la visualización de información" . IEEE Transactions on Visualization and Computer Graphics . 12 (5): 853– 60. CiteSeerX 10.1.1.121.4534 . doi : 10.1109/TVCG.2006.178 . PMID 17080809. S2CID 11634997 .
- ↑ Dougherty, C.; Sayre, K.; Seacord, RC; Svoboda, D.; Togashi, K. (2009). Patrones de diseño seguros . Instituto de Ingeniería de Software, CMU . doi : 10.1184/R1/6583640.v1 .
- ↑ Garfinkel, Simson L. (2005). Principios y patrones de diseño para sistemas informáticos que sean simultáneamente seguros y utilizables (tesis doctoral). MIT . hdl : 1721.1/33204 .
- ↑ Díaz, P.; Rosson, MB; Aedo, I.; Carroll, JM (marzo de 2009). "Patrones de diseño web: investigación de los objetivos del usuario y las estrategias de navegación". En Pipek, V.; Rosson, MB; de Ruyter, B.; Wulf, V. (eds.). Desarrollo del usuario final . 2.º Simposio Internacional sobre Desarrollo del Usuario Final. Lecture Notes in Computer Science . Vol. 5435. Heidelberg: Springer Berlin . pp. 186–204 . doi : 10.1007/978-3-642-00427-8_11 . ISBN 978-3-642-00427-8.
- ↑ Amshoff, B.; Dülme, C.; Echterfeld, J.; Gausemeier, J. (2015). "Patrones de modelos de negocio para tecnologías disruptivas". International Journal of Innovation Management . 19 (03). Imperial College Press : 1540002. doi : 10.1142/S1363919615400022 . ISSN 1757-5877 .
- ↑ Lenguajes de patrones de programación, actas de la conferencia (anual, 1994—)
- 1 2 3 McConnell (2004) , págs. 104–105.
- 1 2 3 4 5 Fowler (2002) .
- ↑ Alur, Crupi y Malks (2003) , pág. 166.
- ↑ Fowler (2002) , pág. 344.
- ↑ Bloch, Joshua (2008). "Elemento 37: Usar interfaces de marcadores para definir tipos" . Effective Java (Segunda edición). Addison–Wesley. pág . 179. ISBN 978-0-321-35668-0.
- ↑ Mössenböck, Hanspeter (julio de 1999). «Twin: un patrón de diseño para modelar la herencia múltiple» (PDF) . Actas de la Tercera Conferencia Internacional en Memoria de Andrei Ershov sobre Perspectivas de la Informática de Sistemas . PSI '99. Novosibirsk, Rusia: Springer-Verlag . págs. 358-369 . ISBN 978-3-540-67102-2.
- ↑ Schmidt, Douglas C.; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). Pattern-Oriented Software Architecture, Volume 2: Patterns for Concurrent and Networked Objects . John Wiley & Sons. ISBN 978-0-471-60695-6.
- 1 2 3 Zheng y Harper (2010) , pág. 42.
- ↑ Propiedades de enlace
- ^ Gabrijelčič , Primož (27 de febrero de 2019). "Introducción a los patrones". Patrones de diseño prácticos con Delphi . Publicación de paquetes. págs. 9 a 35. ISBN 978-178934324-3.
- ↑ Nagel, C.; Evjen, B.; Glynn, J.; Watson, K.; Skinner, M. (2008). "Patrón asíncrono basado en eventos". Professional C# 2008. Wiley. pp. 570–571 . ISBN 978-0-470-19137-8.
- ↑ Francalanza, Adrian; Tabone, Gerard (octubre de 2023). "ElixirST: Un sistema de tipos basado en sesiones para módulos de Elixir" . Journal of Logical and Algebraic Methods in Programming . 135. doi : 10.1016/j.jlamp.2023.100891 . S2CID 251442539 .
- ↑ Schmidt, Douglas C.; Vinoski, Steve (julio-agosto de 1996). "Interconexiones de objetos: comparación de técnicas de programación alternativas para servidores CORBA multihilo (columna 7)" (PDF) . Informe SIGS C++ . S2CID 2654843 .
- ↑ Gabriel, Dick . "Una definición de patrón" . Archivado del original el 9 de febrero de 2007. Recuperado el 6 de marzo de 2007 .
- ↑ Fowler, Martin (1 de agosto de 2006). "Escribiendo patrones de software" . Recuperado el 6 de marzo de 2007 .
- ↑ Norvig, Peter (1998). Patrones de diseño en lenguajes dinámicos . Object World.
- ↑ Hannemann, Jan; Kiczales, Gregor (2002). "Implementación de patrones de diseño en Java y AspectJ". Actas de la 17.ª conferencia ACM SIGPLAN sobre programación orientada a objetos, sistemas, lenguajes y aplicaciones . OOPSLA '02. págs. 161–173 . doi : 10.1145/582419.582436 . ISBN 1581134711.
- ↑ Graham, Paul (2002). "La venganza de los nerds" . Recuperado el 11 de agosto de 2012 .
- ↑ McConnell (2004) , pág. 105.
- ^ Gama y col. (1995) , pág. 3.
- ↑ Arnout, Karine Marguerite Alice (2004). De patrones a componentes (Tesis doctoral). Suiza: ETH Zurich . doi : 10.3929/ethz-a-004715194 . hdl : 20.500.11850/72828 .
- ↑ Oliveira, BC d. S.; Wang, M.; Gibbons, J. (19 de octubre de 2008). "El patrón Visitor como un componente reutilizable, genérico y con seguridad de tipos" . ACM SIGPLAN Notices . 43 (10). Association for Computing Machinery : 439–456 . doi : 10.1145/1449955.1449799 . eISSN 1558-1160 .
- ↑ Meyer, Bertrand ; Arnout, Karine (julio de 2006). "Componentización: El ejemplo del visitante" (PDF) . Computer . 39 (7). IEEE : 23–30 . CiteSeerX 10.1.1.62.6082 . doi : 10.1109/MC.2006.227 . S2CID 15328522 .
- 1 2 3 Richards y Ford (2020) .
- 1 2 3 Gamma et al. (1995) .
- 1 2 Iglberger (2022) , pág. 8.
- ↑ Babar, Muhammad Ali; Kitchenham, Barbara; Maheshwari, Piyush (2006). "Evaluación del valor de la información arquitectónica extraída de patrones para la arquitectura" . 10.ª Conferencia Internacional sobre Evaluación y Valoración en Ingeniería de Software (EASE) . doi : 10.14236/ewic/ease2006.6 . ISSN 1477-9358 . Consultado el 6 de mayo de 2026 .
- ↑ Beck (2007) , cap. 5.
- ↑ Iglberger (2022) , págs. 5–8.
- ↑ Iglberger (2022) , pág. 404.
Bibliografía
- Alur, Deepak; Crupi, John; Malks, Dan (mayo de 2003). Patrones básicos de J2EE: Mejores prácticas y estrategias de diseño (2.ª ed.). Prentice-Hall . ISBN 978-0-13-142246-9.
- Beck, Kent (octubre de 2007). Patrones de implementación . Addison–Wesley . ISBN 978-0-321-41309-3.
- Fowler, Martin (2002). Patrones de arquitectura de aplicaciones empresariales . Addison–Wesley . ISBN 978-0-321-12742-6.
- Gamma, Erich ; Helm, Richard ; Johnson, Ralph ; Vlissides, John (1995). Patrones de diseño: Elementos de software orientado a objetos reutilizable . Addison–Wesley . ISBN 978-0-201-63361-0. Wikidata Q126543992 .
- Beck, Kent ; Crocker, R.; Meszaros, G.; Coplien, J.O .; Dominick, L.; Paulisch, F.; Vlissides, J. (marzo de 1996). «Experiencia industrial con patrones de diseño» (PDF) . Actas de la 18.ª Conferencia Internacional sobre Ingeniería de Software . ICSE. Berlín: IEEE . págs. 103-114 . doi : 10.1109/ICSE.1996.493406 . ISBN 0-8186-7247-1Wikidata Q140403193 . Archivado del original (PDF) el 14 de julio de 2022.
- Iglberger, Klaus (2022). Diseño de software en C++: Principios y patrones de diseño para software de alta calidad . Sebastopol, California: O'Reilly Media. ISBN 978-1-098-11316-2. Wikidata Q140403021 .
- McConnell, Steve (junio de 2004). «Diseño en la construcción». Code Complete: A Practical Handbook of Software Construction (2.ª ed.). Microsoft Press . págs. 73-124 . ISBN 978-0-7356-1967-8.
- Richards, Mark; Ford, Neal (2020). Fundamentos de la arquitectura de software: Un enfoque de ingeniería . O'Reilly Media. ISBN 978-1492043454.
- Zheng, J.; Harper, KE (1 de mayo de 2010). «Patrones de diseño de concurrencia, atributos de calidad del software y sus tácticas». Actas del 3er Taller Internacional sobre Ingeniería de Software Multinúcleo . IWMSE '10. Ciudad del Cabo, Sudáfrica: Association for Computing Machinery . págs. 40–47 . doi : 10.1145/1808954.1808964 . ISBN 978-1-60558-964-0. Wikidata Q140404313 .
Lecturas adicionales
- Alexander, Christopher ; Ishikawa, Sara; Silverstein, Murray; Jacobson, Max; Fiksdahl-King, Ingrid; Angel, Shlomo (1977). Un lenguaje de patrones: pueblos, edificios, construcción . Nueva York: Oxford University Press. ISBN 978-0-19-501919-3.
- Beck, Kent (1997). Patrones de mejores prácticas de Smalltalk . Prentice–Hall. ISBN 978-0134769042.
- Borchers, Jan (2001). Un enfoque basado en patrones para el diseño de interacción . John Wiley & Sons . ISBN 978-0-471-49828-5.
- Brinch Hansen, Per (1995). Estudios en Ciencias Computacionales: Paradigmas de Programación Paralela . Prentice–Hall. ISBN 978-0-13-439324-7.
- Buschmann, Frank; Meunier, Régine; Rohnert, Hans; Sommerlad, Peter (1996). Arquitectura de software orientada a patrones, volumen 1: un sistema de patrones . John Wiley e hijos. ISBN 978-0-471-95869-7.
- Coplien, James O .; Schmidt, Douglas C. (1995). Pattern Languages of Program Design . Addison–Wesley . ISBN 978-0-201-60734-5.
- Coplien, James O .; Vlissides, John M .; Kerth, Norman L. (1996). Pattern Languages of Program Design 2. Addison –Wesley . ISBN 978-0-201-89527-8.
- Eloranta, Veli-Pekka; Koskinen, Johannes; Leppänen, Marko; Reijonen, Ville (2014). Diseño de sistemas de control distribuido: un enfoque de lenguaje de patrones . Wiley. ISBN 978-1118694152.
- Fowler, Martin (1997). Patrones de análisis: modelos de objetos reutilizables . Addison–Wesley . ISBN 978-0-201-89542-1.
- Freeman, Eric; Freeman, Elisabeth; Sierra, Kathy ; Bates, Bert (2004). Head First Design Patterns . O'Reilly Media . ISBN 978-0-596-00712-6.
- Hohmann, Luke; Fowler, Martin ; Kawasaki, Guy (2003). Más allá de la arquitectura de software . Addison–Wesley . ISBN 978-0-201-77594-5.
- Gabriel, Richard (1996). Patrones de software: Relatos de la comunidad del software (PDF) . Oxford University Press . pág. 235. ISBN 978-0-19-512123-0Archivado del original (PDF) el 1 de agosto de 2003.
- Grand, Mark (3 de febrero de 2003). Patrones en Java, Volumen 1: Un catálogo de patrones de diseño reutilizables ilustrados con UML (2.ª ed.). John Wiley & Sons. ISBN 978-047144933-1.
- Hohpe, Gregor; Woolf, Bobby (2003). Patrones de integración empresarial: diseño, construcción e implementación de soluciones de mensajería . Addison–Wesley . ISBN 978-0-321-20068-6.
- Holub, Allen (2004). Holub sobre patrones . Presione . ISBN 978-1-59059-388-2.
- Kircher, Michael; Völter, Markus; Zdun, Uwe (2005). Patrones de acceso remoto: Fundamentos del middleware de objetos distribuidos empresariales, de Internet y en tiempo real . John Wiley & Sons . ISBN 978-0-470-85662-8.
- Larman, Craig (2005). Aplicación de UML y patrones . Prentice–Hall . ISBN 978-0-13-148906-6.
- Liskov, Barbara ; Guttag, John (2000). Desarrollo de programas en Java: Abstracción, especificación y diseño orientado a objetos . Addison–Wesley . ISBN 978-0-201-65768-5.
- Manolescu, Dragos; Voelter, Markus; Noble, James (2006). Pattern Languages of Program Design 5. Addison –Wesley . ISBN 978-0-321-32194-7.
- Marinescu, Floyd (2002). Patrones de diseño EJB: Patrones, procesos e modismos avanzados . John Wiley & Sons . ISBN 978-0-471-20831-0.
- Martin, Robert Cecil ; Riehle, Dirk; Buschmann, Frank (1997). Pattern Languages of Program Design 3. Addison –Wesley . ISBN 978-0-201-31011-5.
- Mattson, Timothy G.; Sanders, Beverly A.; Massingill, Berna L. (2005). Patrones para la programación paralela . Addison–Wesley. ISBN 978-0-321-22811-6.
- Schmidt, Douglas C.; Stal, Michael; Rohnert, Hans; Buschmann, Frank (2000). Arquitectura de software orientada a patrones, volumen 2: Patrones para objetos concurrentes y en red . John Wiley & Sons. ISBN 978-0-471-60695-6.
- Shalloway, Alan; Trott, James R. (2001). Patrones de diseño explicados, segunda edición: una nueva perspectiva sobre el diseño orientado a objetos . Addison–Wesley. ISBN 978-0-321-24714-8.
- Vlissides, John M. (1998). Pattern Hatching: Design Patterns Applied . Addison–Wesley . ISBN 978-0-201-43293-0.
- Weir, Charles; Noble, James (2000). Software de memoria pequeña: Patrones para sistemas con memoria limitada . Addison–Wesley . ISBN 978-0-201-59607-6Archivado del original el 17 de junio de 2007.
- patrones de diseño de software
- Desarrollo de software