PATRONES
DE DISEÑO
Patrones Credenciales
Patrones credenciales
Factory Method
Abstract Method
Builder
Prototype
Singleton
Fuente: https://refactoring.guru/es/design-patterns/creational-
patterns
Factory Method
Es un patrón de diseño creacional que proporciona una interfaz para crear objetos en una superclase,
mientras permite a las subclases alterar el tipo de objetos que se crearán.
Diagramas:
Ventajas
• Evitas un acoplamiento fuerte entre el creador y los productos concretos.
• Principio de responsabilidad única. Puedes mover el código de creación de producto a un lugar del
programa, haciendo que el código sea más fácil de mantener.
• Principio de abierto/cerrado. Puedes incorporar nuevos tipos de productos en el programa sin
descomponer el código cliente existente
Desventajas
• Puede ser que el código se complique, ya que debes incorporar una multitud de nuevas subclases
para implementar el patrón. La situación ideal sería introducir el patrón en una jerarquía existente
de clases creadoras.
Singleton
Es un patrón de diseño creacional que nos permite asegurarnos de que una clase tenga una
única instancia, a la vez que proporciona un punto de acceso global a dicha instancia
Estructura:
Usos
• Se utiliza mucho para encapsular
el acceso a bases de datos.
• Información que se utiliza mucho
en el sistema, para no repetirla en
distintos lugares del código.
Ventajas
• Puedes tener la certeza de que una clase tiene una única instancia.
• Obtienes un punto de acceso global a dicha instancia.
• El objeto Singleton solo se inicializa cuando se requiere por primera vez.
Desventajas:
•Vulnera el Principio de responsabilidad única. El patrón resuelve dos problemas al mismo
tiempo.
• El patrón Singleton puede enmascarar un mal diseño, por ejemplo, cuando los componentes
del programa saben demasiado los unos sobre los otros.
• El patrón requiere de un tratamiento especial en un entorno con múltiples hilos de ejecución,
para que varios hilos no creen un objeto Singleton varias veces.
• Puede resultar complicado realizar la prueba unitaria del código cliente del Singleton porque
muchos frameworks de prueba dependen de la herencia a la hora de crear objetos simulados
(mock objects). Debido a que la clase Singleton es privada y en la mayoría de los lenguajes
resulta imposible sobrescribir métodos estáticos, tendrás que pensar en una manera original de
simular el Singleton. O, simplemente, no escribas las pruebas. O no utilices el patrón Singleton.
Abstract Factory
Es un patrón de diseño creacional que nos permite producir familias de objetos relacionados sin
especificar sus clases concretas.
Estructura:
Ventajas
• Puedes tener la certeza de que los productos que obtienes de una fábrica son compatibles
entre sí.
• Evitas un acoplamiento fuerte entre productos concretos y el código cliente.
• Principio de responsabilidad única. Puedes mover el código de creación de productos a un
solo lugar, haciendo que el código sea más fácil de mantener.
• Principio de abierto/cerrado. Puedes introducir nuevas variantes de productos sin
descomponer el código cliente existente.
Desventajas
• Puede ser que el código se complique más de lo que debería, ya que se introducen muchas
nuevas interfaces y clases junto al patrón..
Builder
Es un patrón de diseño creacional que nos permite construir objetos complejos paso a paso.
El patrón nos permite producir distintos tipos y representaciones de un objeto empleando el
mismo código de construcción.
Ventajas
• Reduce el acoplamiento.
• Se independiza el código de construcción de la representación. Las clases concretas que
tratan las representaciones internas no forman parte de la interfaz del Builder.
• Permite variar la representación interna de estructuras complejas, respetando la interfaz
común de la clase Builder
• Cada ConcreteBuilder tiene el código específico para crear y modificar una estructura interna
concreta.
• Distintos Director con distintas utilidades (visores, parsers, etc) pueden utilizar el mismo
ConcreteBuilder.
Desventajas
La complejidad general del código aumenta, ya que el patrón exige la creación de varias clases
nuevas.
Prototype
Es un patrón de diseño creacional que nos permite copiar objetos existentes sin que el
código dependa de sus clases.
Ventajas
•Puedes clonar objetos sin acoplarlos a sus clases concretas.
• Puedes evitar un código de inicialización repetido clonando prototipos prefabricados.
• Puedes crear objetos complejos con más facilidad.
• Obtienes una alternativa a la herencia al tratar con preajustes de configuración para
objetos complejos.
Desventajas
•Clonar objetos complejos con referencias circulares puede resultar complicado.