https://github.com/duquejo/typescript-designpatterns
Práctica general de patrones de diseño para casos prácticos.
https://github.com/duquejo/typescript-designpatterns
Last synced: over 1 year ago
JSON representation
Práctica general de patrones de diseño para casos prácticos.
- Host: GitHub
- URL: https://github.com/duquejo/typescript-designpatterns
- Owner: duquejo
- Created: 2022-02-03T22:54:08.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-02-04T20:56:12.000Z (over 4 years ago)
- Last Synced: 2025-01-22T21:16:02.797Z (over 1 year ago)
- Language: TypeScript
- Size: 94.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Patrones de diseño
## Tipos de patrones
### Patrones creacionales
Solucionan problemas de instancia o creación de objeto
- Singleton
- Crear una sola instancia de una clase.
- Uso global de la misma.
- Ejemplo:
- Si se desea realizar una configuración de una única vez, es recomendable el uso de este patrón, ahorra recursos a través de una sola instancia de clase.
- Base de datos única (Si es dinámica éste es un antipatrón, ya que debería ser dinámico)
- Factory
- Permite instanciar objetos en tiempo de ejecución
- Ejemplo:
- Módulos de ordenes de compra y cálculo de costos a través de un método de pago. (Paypal 6% retención, Visa 5% retención, MasterCard 10% retención), son métodos de pago que podrían tener una misma base, pero cuentan con parámetros a medida.
- Abstract factory
- Agrupa familias de objetos para su creación, en una sola clase se agrupan una o muchas fábricas.
- Ejemplo:
- Debe publicarse un mensaje en distintas redes sociales y canales de chat (Facebook, LinkedIn, etc), para conectarnos a cada canal, necesitamos varias clases, una para conectarnos, otra para publicar, etc...
- Se vuelve complicado administrar tantos canales en una sola factoría y se olvida el principio de las fábricas que es concentrarse en la implementación más que en el comportamiento.
### Patrones estructurales
Solucionan problemas de relación de una clase con otra
- Adapter
- Permite solucionar incompatibilidad entre clases
- Ejemplo:
- Tenemos código legacy que tiene una funcionalidad en particular. (Un publicador de Facebook) El requerimiento exige que ahora se agregarán otros proveedores como Slack y etc..
- La clase a adaptar debe implementar una interfaz, y todo se resuelve de manera polifórmica a través de la interfaz.
- No se puede refactorizar, debido a que ya está en producción y las nuevas librerías a agregar no son modificables, ambas deben adaptarse.
- Decorator
- Permite agregar comportamiento sin alterar su estructura, todo en tiempo de ejecución.
- Si se piensa por capas, cada capa añadida extra da funcionalidades diferentes, pero no modifica la esencia del mismo
- Al anidar los decoradores, serán ejecutados en orden de pila, es decir, primero el último y así sucesivamente.
- Ejemplo:
- Una tienda de música da descuentos de acurdo a la primera compra del usuario, con base al cliente y a la campaña actual. Posiblemente una estructura de condicionales puede solucionarlo, pero y ¿si se agregan N cantidad de descuentos?.
- Este patrón también aplica para combinaciones entre comportamiento de clases.
- Proxy
- Trabaja como intermediario para cambiar el comportamiento de una clase sin cambiar su estructura. Con esto evitamos que el comportamiento original sea alterado.
- Ejemplo:
- Un sitio web tiene un flujo de visitas muy grande y debido al alto flujo, el proveedor de servicio puede generar delays o sanciones debido a que no es capaz de soportar tanto.
- La solución entonces sería crear un proxy que se conecte a este recurso del sitio web y almacene todo en caché local para su uso posterior.
### Patrones de comportamiento
Mejor propuesta a la forma en que se maneja la interacción y responsabilidades entre clases o de algoritmos implementados.
- Command
- Permite resolver una operación sin conocer el contenido de esta o el receptor. El sólamente ejecuta una tarea. lo que contenga le da igual. Sólo expone el contrato, de la ejecución se encarga él. Proporciona el beneficio de la segregación.
- Observer
- Permite que un objeto publicador pueda notificar un evento a los suscriptores.
- Ejemplo:
- Al realizar un usuario una compra en una plataforma, automáticamente se envía un SMS y un Email notificando la transacción.
- Strategy
- Permite definir una familia de algoritmos para cambiar el comportamiento de la aplicación en tiempo de ejecución.
- Ejemplo: La empresa que actualmente trabaja con Paypal, añadió nuevas formas de pago, convenio con VISA y MasterCard.
## Lenguaje de trabajo
TypeScript
## Referencias
Head first design patterns O'reilly
- Eric Freeman
- Elisabetg Robson
Design Patterns Element of reusable Object-oriented software
- Erich Gamma
- Richard Helm
- Ralph Johnson
- John Vlissides