Please enable JavaScript.
Coggle requires JavaScript to display documents.
Patrones de diseño, Factory Method, Adapter, Chain of Responsibility, MVC…
-
Factory Method
-
-
Caracteristicas:
- Encapsulamiento de la creación de objetos
- Delegación de la creación de objetos a un método
- Una superclase sobreescribe el metodo para producir nuevos tipos
Caso de uso: Los navegadores utilizan diferentes plugins para el renderizado de diferentes tipos (HTML, PDF, Flash)
Ventajas:
- Altamente escalable
- Muy flexible
Escenario: Casos en los que se tenga que crear objetos con características distintas de forma eficiente.
Adapter
-
-
Caracteristicas:
- Una clase adaptadora se encarga de ejecutar métodos de una clase incompatible para obtener une respuesta.
- Se encarga de ejecutar código antiguo sin modificarlo.
- El cliente interactua con el adaptador para ejecutar el código.
-
Ventajas:
- Mantiene la funcionalidad de las clases separada de su adaptación
- Promueve la ejecución de código sin modificarlo
Escenario:
Aplicaciones en las que se busque utilizar tecnología antigua o incompatible, o se reutilicen librerias sin reescribir codigo.
Chain of Responsibility
-
-
Características:
- Distintos objetos "handler" pueden recibir una solicitud y procesarla o pasarla según sea el caso.
- Las solicitudes del cliente van en secuencia de handler en handler.
- Se puede incluir una función "callback" en caso de que ningun handler procesara el objeto.
-
Ventajas:
- Es posible añadir o eliminar handlers del código sin alterarlo directamente.
- Proporciona flexibilidad y escalabilidad al sistema.
Escenario:
Casos en los que se tengan multiples formas de recibir una solicitud, o basadas en privilegios que solamente puedan aceptar ciertas solicitudes.
-
Abstract Factory
-
-
Caracteristicas:
- Una super fábrica que crea otras fabricas para objetos en concreto
- Un cliente dispara la acción de crear las fábricas
- Los objetos construidos comparten caracteristicas sin ser de la misma clase
Caso de uso: Soporte para multiples servicios externos en la nube (AWS, Google Cloud, etc.) dentro de un sitio.
Ventajas:
- El cliente no necesita conocer la clase que creará la fábrica
- Las clases se encuentran encapsuladas y ocultas para el cliente
- Se permiten multiples configuraciones para los objetos
Escenario: Aplicaciones donde se requieran multiples configuraciones o combinaciones diferentes de un producto, sin alterar el código original.
Builder
-
-
Caracteristicas:
- Un objeto "constructor" se encarga de construir el objeto en concreto
- Las caracteristicas del objeto quedan separadas de su proceso de creación
- El mismo objeto constructor permite crear instancias de multiples objetos a conveniencia
-
Ventajas:
- Permite crear multiples objetos distintos mediante el mismo proceso
- Permite una creación controlada y flexible de los objetos
Escenario:
Objetos en donde su construcción requiere de multiples pasos o existen varias configuraciones opcionales.
Prototype
-
-
Características:
- Una interfaz o clase abstracta prototipo interactua con el cliente para crear los objetos
- Los objetos que implementan la interfaz pueden clonarse a si mismos
- Se genera un objeto prototipo que es sencillo de copiar
-
Ventajas:
- Permite una mayor cantidad de configuraciones sin crear multiples clases
- Es eficiente para la creación de objetos
Escenario: Aplicaciones donde la creación de objetos consuma más recursos o sea mas compleja, o cuando se requiera crear objetos dinamicamente en tiempo de ejecución.
Singleton
-
-
Características:
- Una sola instancia que maneja los recursos del programa.
- La instancia puede ser creada al inicio de la ejecución o cuando sea requerida.
- Todos los clientes acceden a esa unica instancis para acceder a algun recurso.
-
Ventajas:
- Implenentación de multiples maneras.
- Puede ser diseñado para ejecutarse en hilos de forma sincronizada.
-
Bridge
-
-
Características:
- Existen dos clases importantes: abstractor e implementador, ambas clases abstractas.
- El abstractor tiene una referencia al implementador.
- Los hijos de estas clases son llamados "refinados" y "concretos", y son los que sobreescriben los métodos padre.
Caso de uso:
Comunicación con un sistema utilizando distintos algoritmos de cifrado (SSH, AES, etc.)
Ventajas:
- Permite que la abstracción y la implementación varien de forma independiente.
- Permite adaptar jerarquías de clases
- Permite crear clases y apps capaces de correr en cualquier plataforma
-
Composite
-
-
Características:
- Existen clase componente, compuesto, y clase hijo o "hoja".
- La clase componente es usada por el compuesto y por la hoja para implementar su funcionalidad.
- El cliente interactua con el componente para tratar igualitariamente al compuesto y a la hoja.
Caso de uso:
Sistemas de archivos con archivos y directorios con subdirectorios o subarchivos que sean tratados todos como un archivo.
Ventajas:
- Proporciona una estructura jerárquica facil de extender o modificar.
- Permite crear una interfaz más sencilla para el cliente.
Escenario:
Programas donde se trabaje con multiples objetos muy similares o donde se busque simplificar el tratamiento de los objetos.
Decorator
-
-
Características:
- Un objeto "decorador" se encarga de envolver al objeto principal.
- Se agrega o elimina característica al objeto de forma dinámica mediante el decorador.
- El mismo decorador puede aplicarse a multiples objetos.
-
Ventajas:
- Extiende la funcionalidad de los objetos sin alterarlos.
- Permite combinar multiples comportamientos sin crear una jerarquía de clases.
Escenario:
Casos en donde se requiera añadir funcionalidad, características o detalles nuevos a un producto sin alterar su código original.
Facade
-
-
Características:
- Una clase "fachada" se encarga de comunicarse con las demás clases del subsistema.
- La fachada proporciona una interfaz que contiene los métodos que el cliente usará en el programa.
- La fachada redirige las solicitudes hechas por el cliente hacia la clase adecuada.
-
Ventajas:
- Proporciona una interfaz simple ocultando la funcionalidad del resto del sistema.
- Se minimiza la dependencia a componentes internos del sistema.
Escenario:
Aplicaciones en donde se tenga un sistema muy complejo que requiere ser facil de usar por el cliente.
Flyweight
-
-
Características:
- Los objetos se separan en datos intrínsecos y extrínseco. La información intrínseca se guarda en un solo lugar y la extrínseca es independiente.
- Se crea una fabrica de objetos que pueden tener información compartida.
- Un cliente interactua con la fábrica para crear o utilizar objetos compartidos.
-
Ventajas:
- Mejora considerablemente el rendimiento al compartir informacion.
- Permite manejar grandes cantidades de objetos.
-
Proxy
-
-
Características:
- Un objeto "Proxy" y un objeto "Real" comparten una misma interfaz con los metodos importantes
- El cliente interactua con el Proxy para acceder al objeto real
- El proxy controla la forma en la que se accede al cliente y puede contener funcionalidad adicional
Caso de uso:
Uso de proxys para carga de imagenes optimizada o control de acceso en sistemas de seguridad.
Ventajas:
- Mejora el rendimiento en algunos casos
- Mantiene la flexibilidad en el diseño el sistema
Escenario:
Casos donde se requiera un intermediario para el acceso a un recurso o el control de la seguridad.
Command
-
-
Características:
- Existe una interfaz de comando que brinda el metodo principal para ejecutarlos
- El invocador llama al objeto y un receptor se encarga de ejecutar la operacion del comando
- El cliente se encarga de ejecutar los comandos
-
Ventajas:
- Es posible añadir nuevos comandos o sistemas sin modificar el codigo principal.
- Permite crear operaciones reversibles, registrables y parametrizables.
Escenario:
Casos en donde se tenga que llevar un historial o registro de los comandos ingresados en un sistema.
Iterator
-
-
Características:
- El iterador es una lista de datos u objetos.
- El iterador posee un registro de cual es el dato actual y cual es el dato siguiente.
- El cliente puede interactuar con el iterador y solicitar los datos en secuencia.
-
Ventajas:
- Simplifica la creación de una interfaz que itere sobre una lista de datos.
- Permite iterar sobre una colección sin importar su estructura interna.
Escenario:
Casos en los que se necesite recorrer una colección de datos de forma secuencial, o si se quiere separar una iteracion del componente principal.
Memento
-
-
Características:
- Un objeto "memento" almacena el estado del programa en un momento determinado.
- Un objeto "originador" lleva registro de todos los mementos guardados.
- El objeto "cuidador" lleva cuenta de los mementos y el cliente puede solicitar los estados anteriores a través de el.
Caso de uso:
Control de versiones de proyectos de software (Github, GitLab, etc.)
Ventajas:
- Permite llevar un registro del estado del programa de forma segura y encapsulada.
- Permite separar el guardado del estado de la funcionalidad principal.
Escenario:
Programas que requieran llevar registro o cuenta de las acciones, comandos o tareas realizadas por el usuario.
Observer
-
-
Características:
- Objetos "observadores" se encargan de registrar cambios dentro de un sujeto.
- Objetos "sujetos" que contienen información que puede cambiar con el tiempo.
- Una lista de observadores se actualiza al completo cuando un sujeto cambia de estado.
-
Ventajas:
- Permite relaciones dinámicas entre objetos, pudiendo eliminar y agregar observadores facilmente.
- Alta reusabilidad y flexibilidad.
-
State
-
-
Características:
- Una clase "contexto" proporciona el estado actual, incluyendo una interfaz para el cliente.
- Existen clases para estados concretos, que incluyen el comportamiento durante dicho estado.
- Una clase "estado" maneja los estados concretos para el contexto sin que este los conozca.
Caso de uso:
Distintas configuraciones y comportamientos en base a quién puede ver o editar un archivo (Word, Google Docs).
Ventajas:
- Facilita la creación de nuevos estados sin alterar los ya existentes.
- Alta reusabilidad de los estados.
Escenario:
Casos en los que un sistema fisico o digital reaccione de varias maneras ante un cambio de configuración.
Strategy
-
-
Características:
- Clases "estrategia" que contienen un comportamiento en específico.
- Clases "contexto" que contienen informacion del estado actual y pueden llamar a las estrategias.
- El cliente modifica el contexto para la aplicación de una estratregia en específico.
Caso de uso:
Distintos procesadores de pago en sitios de compra (tarjeta, Paypal, Stripe, etc.).
Ventajas:
- Reusabilidad del codigo para las estrategias.
- División de responsabilidades mediante la creación de nuevas estrategias dedicadas.
-
Template Method
-
-
Características:
- Se crea una clase abstracta como "base" con los métodos necesarios para ser personalizable.
- Una clase "plantilla" toma los métodos de la clase abstracta y los ejecuta en secuencia.
- Una subclase puede tomar la plantilla y sobreescribir sus métodos para personalizarlos.
-
Ventajas:
- Reusabilidad del codigo al mantener el proceso separado en pasos comunes.
- Refuerza la estructura de los elementos.
-
Visitor
-
-
Características:
- Una clase "visitante" contiene las operaciones para cada elemento.
- Una clase "elemento" recibe y acepta al visitante ejecutando ciertos métodos del mismo.
- Se especifica una colección de elementos con los que interactuará el visitante.
-
Ventajas:
- Separa las operaciones principales de la estructura de los objetos, mejorando la legibilidad del codigo.
- La logica se centraliza dentro del visitante.
Escenario:
Casos en donde se tiene que hacer operaciones usando multiples productos o sistemas sin alterarlos directamente.
DAO (Data Acces Objetc)
-
Propósito:
Encapsular el acceso y manipulación de datos para que la logica de negocio no dependa de detalles de persistencia.
Características:
- Abstrae la comunicación con la base de datos.
- Facilita el cambio de motor de base de datos sin alterar la lógica.
- Centraliza las operaciones CRUD.
Caso de uso:
Un sistema de gestión escolar donde se manejen estudiantes, cursos y calificaciones en la base de datos.
Ventajas:
- Reduce el acoplamiento entre capas
- Simplifica pruebas mediante DAOs simulados
Escenario:
Aplicaciones que requieran manejar múltiples fuentes de datos o cambiar de tecnología de persistencia.
-
-
-
-
Mediator
-
-
Características:
- Un objeto "mediador" es responsable de la comunicación entre varios objetos.
- Los objetos "colega" son aquellos que interactuan entre si.
- Tanto los colegas como los mediadores son interfaces que se pueden aplicar a otras clases.
-
Ventajas:
- Permite reducir la dependencia de la comunicación entre varios objetos.
- Funciona como sistema sencillo para una comunicación compleja.
Escenario:
Casos en donde se necesita que un componente coordine la comunicación de varios otros de forma controlada, sin que dependan entre si directamente.