Resumen Patrones
Resumen Patrones
Resumen Patrones
Una de las formas de superar estas advertencias es utilizar la composición en lugar de la herencia.
Con la composición un objeto tiene una referencia a otro y le delega algún trabajo, mientras que
con la herencia, el propio objeto es capaz de hacer ese trabajo, heredando el comportamiento de
su superclase.
Asociación
La asociación es un tipo de relación en la que un objeto utiliza o interactúa con otro. En los
diagramas UML la relación de asociación se muestra mediante una simple flecha dibujada desde
un objeto y que apunta al objeto que utiliza. En general, se utiliza una asociación para representar
algo como un atributo que contiene una clase.
Dependencia
La dependencia es una variante más débil de la asociación que suele implica que no hay un vínculo
permanente entre los objetos.
La dependencia suele implicar (aunque no siempre) que un objeto acepta otro objeto como
parámetro de un método, lo instancian o utiliza otro objeto. Así es como se puede detectar una
dependencia entre clases: existe una dependencia entre dos clases si cambios en la definición de
una clase provocan modificaciones en otra clase.
Composición
La composición es una relación de "parte entera" entre dos objetos, uno de los cuales está
compuesto por una o más instancias del del otro. La distinción entre esta relación y otras es que el
componente sólo puede existir como parte del contenedor.
En UML la relación de composición se muestra mediante una línea con un diamante relleno en el
extremo del contenedor y una flecha en el extremo apuntando hacia el componente.
Agregación
Tipos de patrones
Adapter
El adapter es un patrón de diseño estructural que permite que objetos con interfaces
incompatibles colaboren entre sí.
Es un objeto especial que convierte la interfaz de un objeto para que otro objeto pueda
entenderla.
Un adapter envuelve uno de los objetos para ocultar la complejidad de la conversión que se
produce por detrás. El objeto envuelto ni siquiera es consciente del adaptador.
TIPS
Utiliza la clase Adapter cuando quieras utilizar alguna clase existente, pero su interfaz no es
compatible con el resto de tu código.
El patrón Adapter te permite crear una clase de capa intermedia que sirve como traductor
entre tu código y una clase heredada, una clase de terceros o cualquier otra clase con una
interfaz extraña
Utiliza el patrón cuando quieras reutilizar varias subclases existentes que carecen de alguna
funcionalidad común que no puede ser añadida a la superclase.
Strategy
El patrón Strategy sugiere que se tome una clase que hace algo específico de muchas maneras
diferentes y se extraigan todos estos algoritmos en clases separadas llamadas estrategias.
La clase original, llamada contexto, debe tener un campo para almacenar una referencia a una de
las estrategias. El contexto delega el trabajo a un objeto de estrategia vinculado en lugar de
ejecutarlo por sí mismo.
TIPS
Utilice el patrón Strategy cuando desee utilizar diferentes variantes de un algoritmo dentro
de un objeto y poder cambiar de un algoritmo a otro durante el tiempo de ejecución.
El patrón Strategy le permite alterar indirectamente el comportamiento del objeto en
tiempo de ejecución asociándolo con diferentes sub-objetos que pueden realizar subtareas
específicas de diferentes maneras.
Utiliza Strategy cuando tengas muchas clases similares que sólo se diferencian en la forma
de ejecutar algún comportamiento
El patrón Strategy le permite extraer el comportamiento variable en una jerarquía de clases
separada y combinar las clases originales en una sola, reduciendo así el código duplicado.
Utilice el patrón para aislar la lógica de negocio de una clase de los detalles de
implementación de los algoritmos que pueden no ser tan importantes en el contexto de esa
lógica.
Utilice el patrón cuando su clase tenga un operador condicional masivo que cambia entre
diferentes variantes del mismo algoritmo.
Composite
El patrón Composite permite ejecutar un comportamiento de forma recursiva sobre todos los
componentes de un árbol de objetos.
TIPS
El patrón Composite proporciona dos tipos de elementos básicos que comparten una
interfaz común: hojas simples y contenedores complejos. Un contenedor puede estar
compuesto tanto por hojas como por otros contenedores. Esto le permite construir una
estructura de objetos recursiva anidada que se asemeja a un árbol.
Utilice este patrón cuando desee que el código del cliente trate los elementos simples y
complejos de manera uniforme.
Todos los elementos definidos por el patrón Composite comparten una interfaz común.
Utilizando esta interfaz, el cliente no tiene que preocuparse por la clase concreta de los
objetos con los que trabaja.
Decorator
TIPS
State
Esta estructura puede parecer similar al patrón de la Estrategia, pero hay una diferencia clave. En
el patrón Estado, los estados particulares estados pueden conocerse entre sí e iniciar transiciones
de de un estado a otro, mientras que las estrategias casi nunca saben sobre los demás.
TIPS
Utilice el patrón Estado cuando tenga un objeto que se comporte diferente dependiendo de
su estado actual, el número de estados es enorme, y el código específico del estado cambia
con frecuencia.
El patrón sugiere que se extraiga todo el código específico del estado en un conjunto de
clases distintas. Como resultado, puede añadir nuevos estados o cambiar los existentes de
forma independiente, reduciendo el coste de mantenimiento.
Utilice el patrón cuando tenga una clase contaminada con masivas condicionales que
alteran el comportamiento de la clase en función de los valores actuales de los campos de la
clase.
El patrón State te permite extraer ramas de estos condicionales en métodos de las clases de
estado correspondientes. Mientras se hace esto, también se pueden limpiar los campos
temporales y los métodos de ayuda involucrados en el código específico del estado fuera de
su clase principal.
Utilice State cuando tenga mucho código duplicado en estados y transiciones similares de
una clase basada en condiciones. estados y transiciones similares de una máquina de
estados basada en condiciones.
Observer
TIPS
Utilice el patrón Observador cuando los cambios en el estado de un objeto pueden requerir
el cambio de otros objetos, y el conjunto real de objetos es desconocido de antemano o
cambia dinámicamente.
Utilice este patrón cuando algunos objetos de su aplicación deban observar otros, pero sólo
por un tiempo limitado o en casos específicos.
Command
✓ Genera una abstracción por cada acción que se quiere realizar, encapsulando cada
comportamiento en una clase.
✓ Permite enviar órdenes para que alguien las realice en ese momento o en un momento
posterior, sin interesar quién es el receptor de éstas.
TIPS