Mapa mental
Patrones de diseño

Conteúdo do mapa
Patrones de diseño
Creacionales
- Factory
- Principio
- Dependa de abstracciones. No dependa de clases concretas.
- Abstracto
- Proporciona una interfaz para crear familias de objetos relacionados o dependientes sin especificar sus clases concretas
- Características
- Crea familias de objetos relacionados sin tener que depender de sus clases concretas.
- Permite que una clase difiera la instanciación a sus subclases.
- Se basa en la composición de objetos.
- La creación de objetos se implementa en métodos expuestos en la interfaz de fábrica.
- Simple
- Define una interfaz para crear un objeto, pero permite que las subclases decidan qué clase instanciar.
- Este patrón permite que una clase difiera la instanciación a subclases.
- Características
- Es una forma sencilla de desvincular a sus clientes de las clases concretas.
- Características generales
- Encapsula la creación de objetos.
- Promueve un acoplamiento flexible al reducir la dependencia de su aplicación en las clases de concreto.
- Se basa en la herencia
- Principio
- Singleton
- Garantiza que una clase tenga solo una instancia y proporciona un punto global de acceso a ella.
- Características
- Asegura que tenga como máximo una instancia de una clase en su aplicación.
- Proporciona un punto de acceso global a esa instancia.
- Su implementación hace uso de un constructor privado.
- Un método estático combinado con una variable estática.
- Si se usan varios cargadores de clases, se podría frustrar la implementación de Singleton y resultar en múltiples instancias.
- Builder
- Separa la creación de un objeto complejo de su estructura, de tal forma que el mismo proceso de construcción nos puede servir para crear representaciones diferentes.
- Se aplica cuando
- Nuestro sistema trata con objetos complejos (compuestos por muchos atributos) pero el número de configuraciones es limitada.
- El algoritmo de creación del objeto complejo puede independizarse de las partes que lo componen y del ensamblado de las mismas.
- Características
- Encapsula la forma en que se construye un objeto complejo.
- Permite que los objetos se construyan en un proceso variable y de varios pasos.
- Oculta la representación interna del producto al cliente.
- Protorype
- Permite la creación de objetos basados en "plantillas". Un nuevo objeto se crea a partir de la clonación de otro objeto.
- Características
- Oculta las complejidades de hacer nuevas instancias del cliente.
- Proporciona la opción para que el cliente genere objetos cuyo tipo se desconoce.
- En algunas circunstancias, copiar un objeto puede ser más eficaz que crear uno nuevo.
- Se usa cuando
- La creación de nuevos objetos acarrea un coste computacional elevado.
- Los objetos a crear tienen o suelen tener atributos que repiten su valor.
- Factory
Estructurales
- Decorator
- Adjunte responsabilidades adicionales a un objeto de forma dinámica.
- Los decoradores brindan una alternativa flexible a la subclasificación para extender.
- Principio
- Las clases deben estar abiertas para extensión pero cerradas para modificaciones.
- Características:
- La herencia es una forma de extensión, pero no necesariamente la mejor manera de lograr flexibilidad en los diseños.
- En los diseños debemos permitir que se amplíe el comportamiento sin necesidad de modificar el código existente.
- La composición y la delegación a menudo se pueden usar para agregar nuevos comportamientos en tiempo de ejecución.
- Proporciona una alternativa a la subclasificación para extender el comportamiento.
- Implica un conjunto de clases de decorador que se utilizan para envolver componentes concretos.
- Las clases de decoradores reflejan el tipo de componentes que decoran.
- Los decoradores cambian el comportamiento de sus componentes agregando nueva funcionalidad antes y / o después (o incluso en lugar de) las llamadas al método al componente.
- Puede envolver un componente con cualquier número de decoradores.
- Los decoradores pueden resultar en muchos objetos pequeños en nuestro diseño, y el uso excesivo puede ser complejo.
- Adapter
- Convierte la interfaz de una clase en otra interfaz que esperan los clientes
- Permite que las clases trabajen juntas que de otra manera no podrían debido a interfaces incompatibles
- Características
- Permite adaptar clases en dominios totalmente diferentes.
- Un único adaptador puede adaptar la funcionalidad de múltiples clases.
- Dependiendo de la implementación, el adaptador puede contener múltiples punteros que incrementen la complejidad del sistema.
- Se usa cuando
- Pretendemos usar una clase existente cuya interfaz no es compatible con la requerida.
- Facade
- Proporciona una interfaz unificada a un conjunto de interfaces en un subsistema.
- Define una interfaz de nivel superior que facilita el uso del subsistema.
- Características
- Simplifica el uso de sistemas complejos con tareas redundantes.
- Reduce el acoplamiento entre el subsistema y los clientes.
- Se aplica cuando
- Nuestro sistema cliente tiene que acceder a parte de la funcionalidad de un sistema complejo.
- Hay tareas o configuraciones muy frecuentes y es conveniente simplificar el código de uso.
- Bridge
- Desacopla una abstracción de su implementación, para que las dos puedan evolucionar de forma independiente.
- Se usa cuando
- Queremos evitar enlaces permanentes entre una abstracción y una implementación.
- Queremos que los cambios en la implementación de una abstracción no afecten al cliente.
- Necesitamos que la implementación de una característica sea compartida entre múltiples objetos.
- Características
- Una implementación no se limita permanentemente a una interface.
- La implementación de una abstracción puede ser configurada y/o cambiada en tiempo de ejecución.
- Cambiar una implementación no requiere recompilar la clase Abstraction ni sus clientes.
- Composite
- Facilita la creación de estructuras de objetos en árbol, donde todos los elementos emplean una misma interfaz.
- Se aplica cuando
- El usuario ignora la diferencia entre composiciones de objetos y objetos individuales.
- Se detecta que se están utilizando varios objetos de la misma manera, y con frecuencia tienen código casi idéntico para manejarlos.
- Características
- Estructura nuestro programa de tal manera que clarifica las jerarquías de clases implicadas.
- Hace el cliente simple.
- Permite tratar la estructura y los objetos individuales
- FlyWeight
- Se usa cuando
- Una instancia de una clase pueda utilizarse para proporcionar muchas "instancias virtuales".
- Características
- Reduce el número de instancias de objetos en tiempo de ejecución, ahorrando memoria.
- Centraliza el estado de muchos objetos "virtuales" en una única ubicación.
- Se usa cuando
- Proxy
- Es una clase que funciona como interfaz hacia cualquier otra cosa.
- Se usa cuando
- Se necesita una referencia a un objeto más flexible o sofisticada que un puntero.
- Proxy remoto
- Representa un objeto en otro espacio de direcciones.
- Proxy virtual
- Retrasa la creación de objetos costosos.
- Proxy de protección
- Controla el acceso a un objeto.
- Decorator
De comportamiento
- Observer
- Define una dependencia de uno a muchos entre los objetos de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.
- Principio de diseño
- Esfuércese por lograr diseños poco ajustados entre objetos que interactúan.
- Características:
- Lo único que el sujeto sabe sobre un observador es que implementa una determinada interfaz (la interfaz Observer). No necesita conocer la clase concreta del observador, lo que hace o cualquier otra cosa al respecto.
- Podemos agregar nuevos observadores en cualquier momento.
- Podemos reemplazar cualquier observador en tiempo de ejecución con otro observador
- Podemos eliminar observadores en cualquier momento.
- Podemos reutilizar sujetos u observadores independientemente unos de otros. Si nosotros
- Los cambios en el sujeto o en un observador no afectarán al otro.
- Command
- Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse.
- Se aplica cuando
- Precisamos de colas, pilas u otras estructuras para gestionar las invocaciones.
- Exista la posibilidad de cancelar operaciones.
- Se necesite parametrizar de manera uniforme las invocaciones.
- Características
- Desacoplamiento de la aplicación que invoca las órdenes y la implementación de las mismos.
- Como las órdenes son objetos, podemos aplicar la herencia a las mismas o realizar composiciones de órdenes.
- Permite modificar las órdenes a ejecutar en tiempo de ejecución.
- Chain of responsibility
- Se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo.
- Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena.
- Se aplica cuando
- Varios objetos pueden manejar cierta petición, y el manejador no se conoce a priori, sino que debería determinarse automáticamente.
- Características
- Elimina o reduce el acoplamiento existente entre el emisor y el receptor del mensaje.
- Flexibilidad a la hora de establecer las responsabilidades, permitiendo modificarlas en tiempo de ejecución.
- Interpreter
- Define una representación para una gramática así como el mecanismo para evaluarla.
- Se usa cuando
- Debemos trabajar con sentencias de un lenguaje que nuestro lenguaje de programación no reconoce automáticamente.
- La gramática del lenguaje con el que debemos trabajar es sencilla.
- Características
- Fácil modificación y ampliación de los elementos gramaticales
- Su implementación es sencilla
- La implementación de los métodos para cada elemento del lenguaje es dinámica
- Iterator
- Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica.
- Se usa cuando
- Debemos aplicar este patrón cuando tengamos que trabajar con objetos que internamente trabajan sobre un grupo de elementos y debamos poder manejar dichos elementos sin que un cambio en la implementación de la lista o conjunto afecte al sistema global.
- Características
- Estandariza el tratado de elementos de listas con implementaciones independientes.
- Permite variar el tratamiento de las listas modificando tan solo la clase que implementa el iterador.
- Se pueden realizar múltiples recorridos simultáneos.
- Mediator
- Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí.
- Se usa cuando
- La reutilización de un objeto es difícil ya que es dependiente de muchos otros.
- Características
- Desacopla a los integrantes del sistema de sus interacciones.
- Simplifica la comunicación entre objetos
- Memento
- Este patrón otorga la capacidad de restaurar un objeto a un estado anterior
- Características
- Mantiene encapsulados los datos del objeto clave.
- Proporciona una capacidad de recuperación fácil de implementar
- Se utiliza para guardar el estado.
- Un inconveniente de usar Memento es que guardar y restaurar el estado puede llevar mucho tiempo.
- State
- Permite modificar la forma en que un objeto se comporta en tiempo de ejecución, basándose en su estado interno.
- Características
- Representa el estado como una clase en toda regla.
- El Contexto obtiene su comportamiento delegando al objeto de estado actual con el que está compuesto.
- Al encapsular cada estado en una clase, localizamos cualquier cambio que sea necesario realizar.
- Las transiciones de estado pueden ser controladas por las clases de estado o por las clases de contexto.
- El uso del patrón de estado generalmente dará como resultado un mayor número de clases en su diseño.
- Strategy
- Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución.
- Características
- Configura una clase con un determinado comportamiento entre muchos posibles.
- Evitar exponer estructuras de datos complejas y dependientes del algoritmo
- ofrece una alternativa a las sentencias condicionales para seleccionar el comportamiento deseado.
- Las jerarquías de clases Estrategia definen una familia de algoritmos o comportamientos
- Template Method
- Especifica el esqueleto de un algoritmo, permitiendo a las subclases definir cómo implementan el comportamiento real.
- Características
- Brinda una técnica importante para la reutilización del código.
- Su clase abstracta puede definir métodos concretos, métodos abstractos y ganchos.
- Los métodos abstractos se implementan por subclases.
- Los Hooks son métodos que no hacen nada o tienen un comportamiento predeterminado en la clase abstracta, pero pueden ser anulados en la subclase.
- Visitor
- Permite separar el algoritmo de la estructura de datos que se utilizará para ejecutarlo.
- Características
- Le permite agregar operaciones a una estructura compuesta sin cambiar la estructura en sí.
- Agregar nuevas operaciones es relativamente fácil.
- El código para las operaciones realizadas por el Visitante está centralizado
- Observer
Imagens e arquivos do mapa
Informações
- Descrição
- Mapa Mental sobre Patrones de diseño, criado por Jorge Martin Ixta Martinez em 04-10-2020.
- Criado por
- Jorge Martin Ixta Martinez · out 2020
- Atualizado
- 9 out 2020
- Visualizações
- 1
- Avaliação