SlideShare una empresa de Scribd logo
1 de 103
Patrones de Diseño
con ejercicios en Java
micael.gallego@gmail.com
¿Qué es un patrón de diseño?
 Es una solución bien documentada que los
expertos aplican para solucionar nuevos problemas
porque han sido utilizadas con éxito en el pasado
 Los expertos identifican partes de un problema que
son similares a otros problemas que han
encontrado anteriormente
 Recuerdan la solución aplicada y la generalizan
 Adaptan la solución general al contexto del
problema actual
¿Qué es un patrón de diseño?
 Son una forma estandarizada para representar
soluciones generales de problemas que se
encuentran comúnmente en el desarrollo de
software orientado a objetos
 Beneficios
 Catálogos de patrones
 Están documentados los pros y los contras de cada
patrón. Se conocen las implicaciones de su aplicación
 Proporcionan un vocabulario común entre desarrolladores
Abstracción y Reutilización
 Los patrones suponen una evolución en la
abstracción y reutilización en la
programación
 Abstracción
 Resolución de problemas complejos dividiéndolos
en otros más simples
 Capacidad de ocultar detalles superfluos y
centrarse en lo relevante para reducir la
complejidad
Abstracción y Reutilización
 Reutilización
 Posibilidad de usar de nuevo código ya
desarrollado anteriormente
 Formas de reutilización
 Copiar y Pegar !!PELIGRO¡¡
 Reutilización de algoritmos (búsquedas,
ordenaciones, …)
 Reutilización de funciones (métodos)
 Reutilización de librerías o APIs (métodos, clases, …)
Abstracción y Reutilización
 Abstracción y Reutilización en Programación
Orientada a Objetos
 Abstracción funcional y de datos
 La encapsulación implica mejor reutilización
 La herencia permite formas de reutilización antes
no posibles
 Es posible desarrollar algoritmos de forma genérica y
especializarlos creando clases hijas y redefiniendo o
implementando ciertos métodos
Abstracción y Reutilización
Tipo de
Reutilización
¿Se puede aplicar
de nuevo?
¿Qué se abstrae? Genericidad
Fragmento de
código
Muy Pobre Nada Muy pobre
Estructura de datos Buena Tipos de datos Moderada-Buena
Funcional Buena Método Moderada-Buena
Tipos Genéricos Buena Operación para tipo Buena
Algoritmo Buena Fórmula Buena
Clases (Interfaz,
Polimorfismo, Clase
abstracta)
Buena Datos + Métodos Buena
API (Librería) Buena Clases útiles Buena-Muy Buena
Componente Buena Grupo de Clases Buena-Muy Buena
Patrón de Diseño Excelente Solución a un
problema
Muy Buena
Tipos de Patrones
 Existen cuatro grandes tipos de patrones de
diseño
 Patrones de Creación
 Patrones de Comportamiento
 Patrones Estructurales
 Patrones de sistema
Tipos de Patrones
 Patrones de Creación
 Facilitan y simplifican la creación de objetos
 Permiten crear objetos sin definir la clase
concreta, sólo la interfaz que debe implementar
 Permiten reutilizar otros objetos en vez de crear
nuevos debido a restricciones o eficiencia
 Patrones de Comportamiento
 Guían el flujo de control del sistema (para facilitar
la eficiencia y facilitar el mantenimiento)
Tipos de Patrones
 Patrones Estructurales
 Describen formas efectivas de partir y combinar
los elementos de una aplicación
 Permiten la comunicación de sistemas
incompatibles, la introducción de simplificaciones
que mejoren la independencia entre partes,…
 Patrones de sistema
 Se aplican a la arquitectura de la aplicación
 Patrones más generales que los otros tipos
¿Cómo es un patrón?
 Los patrones están especificados siguiendo un
formulario o formato estándar:
 Nombre
 También conocido como – Otros nombres usuales
 Propiedades
 Tipo - Creación, Comportamiento, Estructural o De sistema
 Nivel - Clase única, Componente (Grupo de clases),
Arquitectónico (Coordina sistemas y subsistemas)
 Propósito - ¿Para qué sirve?
 Presentación – Problema que soluciona (con ejemplos)
 Aplicabilidad – Cuando y por qué debería usarse
¿Cómo es un patrón?
 …
 Descripción – Que hace y como se comporta de
forma detallada
 Implementación - ¿Cómo implementarlo?
 Ventajas e Inconvenientes
 Variantes
 Patrones Relacionados
 Ejemplo
Patrones de Creación
 Facilitan y simplifican la creación de objetos
 Permiten crear objetos sin definir la clase
concreta, sólo el interfaz que debe
implementar
 Permiten reutilizar otros objetos en vez de
crear nuevos debido a restricciones o
eficiencia
Patrones de Creación
 Singleton (Único)
 Restringe la creación de un único objeto de una
clase en todo el sistema y permite acceder a él
 Factory Method (Método Factoría)
 Define un método para la creación de objetos
además del constructor
 Builder (Constructor)
 Simplifica la construcción de objetos complejos
definiendo una clase cuya responsabilidad es
crear objetos de otras clases
Patrones de Creación
 Abstract Factory (Fábrica Abstracta)
 Permite crear objetos de un conjunto de clases
relacionadas pero sin especificar la clase
concreta, solo el interfaz
 Prototype (Prototipo)
 Define clases cuyos objetos pueden clonarse
 Hay muchos mas…
Patrones de Creación
Singleton (Único)
 Propiedades
 Tipo: Creación, Nivel: Objeto
 Propósito
 Permite tener una única instancia de esta clase
en el sistema, y permite que todas las clases
tengan acceso a esa instancia
Patrones de Creación
Singleton (Único)
 Introducción
 Hay veces que se necesita esta funcionalidad
 Por ejemplo: Un histórico de todas las acciones que realiza
el usuario en la aplicación. Desde todas las clases se
necesita usar el mismo objeto HistoryList
 Se podría crear un único objeto y pasar ese objeto como
parámetro a todos los demás objetos. Puede no saberse a
priori quien va a necesitar el objeto y puede ser complejo
estar pasándolo constantemente. Sólo con documentación
se puede obligar a que nadie más cree un objeto
HistoryList
Patrones de Creación
Singleton (Único)
 Introducción…
 Se podría crear el objeto al inicio y colocarlo en
un atributo estático. Pero no se podría
proporcionar ninguna información de inicialización
justo cuando vaya a usarse y no se puede
controlar quien accede al objeto
Patrones de Creación
Singleton (Único)
 Aplicabilidad
 Cuando se requiera una instancia de una clase y accesible
globalmente
 Descripción
 Asegura crear como máximo una instancia de un objeto.
 Ponga el constructor privado
 Ponga un método público estático getInstance() que
devuelva el objeto. Este método crea la instancia si no se
ha creado todavía, la guarda como un atributo estático
privado y la devuelve
 Se puede crear el objeto directamente sobre el atributo
estático
Patrones de Creación
Singleton (Único)
 Implementación
 Clase que tiene privado el
constructor, mantiene una
referencia estática al único
objeto de la clase y
proporciona un método
estático getInstance()
para que otras clases accedan
al único objeto
 El resto de la implementación
es completamente normal
Patrones de Creación
Singleton (Único)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class HistoryList {
private static HistoryList instance = new HistoryList();
private List history = new ArrayList();
private HistoryList() {
}
public static HistoryList getInstance() {
return instance;
}
public void addCommand(String command) {
history.add(command);
}
public Object undoCommand() {
return history.remove(history.size() - 1);
}
...
}
Patrones de Creación
Singleton (Único)
 Ventajas
 La clase Singleton es la única que puede crear objetos de
la clase, asegurando la unicidad
 No se necesita pasar la referencia a todos los objetos que
la necesiten, simplificando el desarrollo y haciendo la
aplicación más mantenible
 Inconvenientes
 Puede tener problemas en aplicaciones con muchos hilos
de ejecución y con una única instancia
 Si en el sistema evoluciona y se necesitan más instancias
de la clase, habría que cambiar todos los accesos a la
clase Singleton
Patrones de Creación
Singleton (Único)
 Variaciones del patrón
 Mantener varias instancias que pueden ser
obtenidas con versiones con parámetros del
método getInstance(...)
 Cuando existen múltiples instancias, pueden ser
de clases hijas diferentes dependiendo de los
parámetros
Patrones de Creación
Singleton (Único)
 Patrones relacionados
 Abstract Factory (Factoría Abstracta)
 Builder (Constructor)
 Prototype (Prototipo)
Patrones de Creación
Singleton (Único)
 Patrón Singleton en la API de Java
 Clase java.awt.Toolkit
 Variación del patrón porque Toolkit es abstracta y la
instancia devuelta es de una clase hija
 El método es getDefaultToolkit()
 Clase java.lang.Runtime
 El método es getRuntime()
 Clase java.text.DateFormat
 Variación del patrón porque DateFormat es abstracta
 Tiene varios métodos con varias instancias
getDateInstance(), getDateInstance(int
style), getDateTimeInstance(), …
Ejercicio 1
 Aplica el patrón Singleton a la clase
GestorIO en el juego de las Tres en Raya
 De esta forma se conseguirá eficiencia,
porque con un objeto GestorIO es
suficiente en toda la aplicación
Patrones de Creación
Prototype (Prototipo)
 Propiedades
 Tipo: De creación, Nivel: Clase única
 Propósito
 Facilita la creación de objetos copia de otros
objetos
Patrones de Creación
Prototype (Prototipo)
 Introducción
 En muchas ocasiones es necesario crear objetos
que tengan el mismo estado que otros objetos ya
creados
 Se podría crear un objeto en su estado inicial y
copiar el valor de cada atributo. Pero eso
obligaría a desencapsular la clase
 El patrón consiste en crear un método copy que
cree un objeto con el mismo estado que el que
recibe el mensaje de copy
Patrones de Creación
Prototype (Prototipo)
 Aplicabilidad
 Se utiliza el patrón Prototype para crear un objeto
que sea copia de otro
 Descripción
 Permite copiar el estado de un objeto
 Se puede utilizar en las opciones de “copiar” y
“pegar”
Patrones de Creación
Prototype (Prototipo)
 Implementación
 Incluir un método de copia (copy)
 Este método devuelve un objeto de la misma
clase cuyos atributos tienen los mismos valores
que los atributos del objeto original
 Ventajas e Inconvenientes
 Crea copias sin necesidad de que el que necesita
la copia conozca todos los atributos de lo copiado
 Hay que tener en cuenta la profundidad de la
copia (copiar la referencia de un atributo o copiar
el atributo en sí)
Patrones de Creación
Prototype (Prototipo)
 Variaciones del patrón
 Constructor de copia, que recibe como parámetro
un objeto de la misma clase y obtiene de él sus
valores
 Patrones relacionados
 Abstract Factory (Factoría Abstracta)
 Factory Method (Método de Fabricación)
Patrones de Creación
Prototype (Prototipo)
 Ejemplo
Ejercicio 2
 Aplica el patrón Prototype en la clase Lista
del ejemplo de las estructuras de datos para
copiar la lista
 Que se copie la lista, pero no los elementos
que contiene
 Crea un programa ejemplo para comprobar
el correcto funcionamiento del código
Patrones de Creación
Factory Method (Método Factoría)
 También conocido como
 Virtual Builder (Constructor Virtual)
 Propiedades
 Tipo: De creación, Nivel: Clase
 Propósito
 Permite definir un método estándar en una clase
para crear objetos. Las subclases deciden la
clase concreta que crear
Patrones de Creación
Factory Method (Método Factoría)
 Introducción
 Supongamos una aplicación de gestión de una
lista, que permita borrar, editar y añadir valores
 Esta aplicación tiene dos partes, la interfaz de
usuario (un menú en modo texto) y la Lista.
 La lista tiene un método para poner un valor
(String) en una determinada posición (int)
 public void set(int position, String value)
Patrones de Creación
Factory Method (Método Factoría)
 …
 Se quiere generalizar la aplicación incorporando
una estructura de datos tipo mapa (clave,valor)
 Creamos la clase abstracta EstructuraDatos
(de la que heredan Lista y Mapa). Creamos la
clase abstracta Selector (de la que heredan
SLista y SMapa)
 El menú usa objetos de EstructuraDatos y
Selector.
 De esta forma se pueden incorporar nuevas
estructuras de datos
Patrones de Creación
Factory Method (Método Factoría)
 …
 El problema está en que el menú tiene que
construir objetos de la clase Selector cuando le
pregunta al usuario, pero no sabe que clase
instanciar, si SLista o SMapa.
 El patrón Método Factoría propone que exista un
método en EstructuraDatos que permita crear
el objeto Selector correspondiente
 (Ver ejemplo)
Patrones de Creación
Factory Method (Método Factoría)
 Ejemplo (ver código)
Patrones de Creación
Factory Method (Método Factoría)
 Aplicabilidad
 Cuando se quiera crear un framework extensible.
 Cuando una subclase decide que objeto crear
 Sabe cuando crear un objeto, pero su clase
depende de la clase de otro objeto
Patrones de Creación
Factory Method (Método Factoría)
 Descripción
 Existe un método de fabricación en una clase
abstracta (Creator) que debe ser implementado
por las clases hijas (ConcreteCreator).
 Ese método devuelve objetos que heredan de
una clase abstracta (Product)
 Son las ConcreteCreator las que deciden la
clase que hereda de Product
(CocreteProduct) que deben instanciar
Patrones de Creación
Factory Method (Método Factoría)
 Implementación
Patrones de Creación
Factory Method (Método Factoría)
 Ventajas e Inconvenientes
 Con el polimorfismo podemos hacer código
genérico para una clase. Con este patrón
podemos hacer código genérico para varias
clases y el código genérico puede instanciar
objetos cuando quiere
 El inconveniente es que para añadir un producto
nuevo hay que cambiar varias clases
Patrones de Creación
Factory Method (Método Factoría)
 Variaciones del Patrón
 Creator puede tener factoryMethod concreto
y proporcionar una implementación por defecto
 El método de fabricación puede tomar parámetros
y puede instanciar los ConcreteProduct
dependiendo del parámetro
 Creator y Product pueden ser interfaces
 Patrones relacionados
 Abstract Factory (Fábrica Abstracta)
 Prototype (Prototipo)
 Template Method (Método Plantilla)
Ejercicio 3
 Incorpora una nueva implementación del
Tablero del juego de las Tres en Raya.
 Las columnas deben identificarse mediante
letras (A,B,C…)
 Habrá que crear otra implementación de
Coordenada con las columnas como letras
 Usar el patrón Factory Method al instanciar
objetos de alguna clase concreta de
coordenada
Patrones de Comportamiento
 Están relacionados con el flujo de control del
sistema
 Ciertas formas de organizar el control en un
sistema pueden derivar en grandes
beneficios para la eficiencia y el
mantenimiento del sistema
Patrones de Comportamiento
 Chain of Responsability (Cadena de
Responsabilidad)
 Establece una cadena en un sistema, para que un
mensaje pueda ser manejado en el nivel en el que se
recibe en primer lugar o ser redirigido a otro objeto que
pueda manejarlo
 Command (Comando)
 Encapsula un comando en un objeto de tal forma que
pueda ser almacenado, pasado a métodos y devuelto igual
que otro objeto
 Interpreter (Intérprete)
 Define un intérprete para un lenguaje
Patrones de Comportamiento
 Iterator (Iterador)
 Proporciona una forma coherente de acceder
secuencialmente a los elementos de una
colección, independientemente del tipo de
colección
 Mediator (Mediador)
 Simplifica la comunicación entre los objetos de un
sistema introduciendo un único objeto que
gestiona la distribución de mensajes entre los
otros
Patrones de Comportamiento
 Observer (Observador)
 Proporciona a los componentes una forma flexible de
enviar mensajes de difusión a los receptores interesados
 State (Estado)
 Permite modificar fácilmente el comportamiento de un
objeto en tiempo de ejecución
 Strategy (Estrategia)
 Define un grupo de clases que representa un conjunto de
posibles comportamientos. Estos comportamientos pueden
ser fácilmente intercambiados.
Patrones de Comportamiento
 Visitor (Visitante)
 Proporciona una forma fácil y sostenible de
ejecutar acciones en una familia de clases. Este
patrón centraliza los comportamientos y permite
que sean modificados o ampliados sin cambiar
las clases sobre las que actúan
Patrones de Comportamiento
Command (Comando)
 Propiedades
 Tipo: De comportamiento
 Nivel: Objeto
 Propósito
 Encapsular un comando en un objeto de tal forma
que pueda ser almacenado, pasado a métodos y
devuelto igual que cualquier otro objeto
Patrones de Comportamiento
Command (Comando)
 Introducción
 Cuando un usuario selecciona una acción para ejecutarla,
la aplicación necesita saber desde dónde obtener los
datos y el comportamiento relevantes
 Normalmente, la aplicación mantendrá la lógica en un
lugar centralizado
 Los usuarios pueden necesitar deshacer las acciones
realizadas
 Es lógico combinar la acción en un objeto: el objeto
comando. Ese objeto tiene el comportamiento y los datos
necesario para una acción específica
Patrones de Comportamiento
Command (Comando)
 Aplicabilidad
 Dar soporte para deshacer comandos, procesos
de identificación, etc...
 Poner en cola y ejecutar comandos en momentos
distintos
 Desacoplar la fuente de una petición del objeto
que la cumple
Patrones de Comportamiento
Command (Comando)
 Descripción
 Una aplicación que no use el patrón Command
tendrá que proporcionar una clase manejadora de
código para controlar todos los eventos que
puedan ocurrir
 El patrón Command encapsula los datos y
funcionalidad necesarias para cumplir una acción
o una petición específicas
 Proporciona una separación entre cuándo hay
que ejecutar una acción y cómo tiene que ser
ejecutada
Patrones de Comportamiento
Command (Comando)
 Implementación
Patrones de Comportamiento
Command (Comando)
 ...
 Command: Interfaz de todos los comandos
 Invoker: El que decide cuando ejecutar el
comando
 Receiver: El objeto sobre el que se ejecutará el
comando
 ConcreteCommand: Implementación de
Command. Mantiene una referencia al Receiver
para realizar las acciones cuando se le llama a
execute
Patrones de Comportamiento
Command (Comando)
 Ventajas
 Desacopla la fuente o el disparador del evento
del objeto que tiene conocimiento para ejecutar la
tarea
 Permite reemplazar los objetos command y
receiver en tiempo de ejecución
 Al ser los comando objetos normales, es más
sencillo hacer log, deshacer, ...
 Facilita la introducción de nuevos comandos, tan
sólo creando una nueva implementación de
command
Patrones de Comportamiento
Command (Comando)
 Variaciones
 Deshacer: El patrón command puede ser
extendido para incorporar la posibilidad de
deshacer. Al realizar la acción se guarda lo
necesario para deshacer la acción y se incorpora
un método undo()
 MacroCommand: Se puede crear un comando
que esté compuesto por otros comandos y que
pueda ser gestionado de manera uniforme
(usando el patrón Composite)
Patrones de Comportamiento
Command (Comando)
 Patrones relacionados
 Composite (Compuesto): Para implementar el
patrón compuesto
 Memento (Recuerdo): Guarda el estado del
receptor, para crear el deshacer
 Prototype (Prototipo): Puede ser usado para
copiar el comando antes de incluirlo en el historial
 Singletón (Único): En la mayoría de las
aplicaciones, el historial se implementa como un
singleton
Patrones de Comportamiento
Command (Comando)
 Ejemplo (ver código)
 En la aplicación de citas se incorpora un
comando con opciones de deshacer
Ejercicio 4
 Incorpora el patrón Command en el
programa de gestión de estructuras de datos
en el que se permita la acción de deshacer
Patrones de Comportamiento
Iterator (Iterador)
 También conocido como
 Cursor
 Propiedades del patrón
 Tipo: De comportamiento
 Nivel: Componente
 Propósito
 Proporcionar una forma coherente de acceder
secuencialmente a los elementos de una
colección, independientemente del tipo de
colección subyacente
Patrones de Comportamiento
Iterator (Iterador)
 Introducción
 Las estructuras de datos pueden estar
implementadas de muchas formas
 Pueden usarse arrays, listas enlazadas o árboles
(por si los elementos están ordenados)
 Lo habitual es recorrer secuencialmente los
elementos de la colección
Patrones de Comportamiento
Iterator (Iterador)
 ...
 Usar un índice que se va incrementando podría ser muy
ineficiente para implementaciones basadas en árboles o
listas enlazadas
 El patrón Iterator resuelve este problema definiendo una
interfaz uniforme y eficiente para recorrer cualquier
estructura de datos de forma secuencial,
independientemente de su implementación
for(int i=0; i<lista.size(); i++){
System.out.println(“Elemento:“+lista.get(i));
}
Patrones de Comportamiento
Iterator (Iterador)
 Aplicabilidad
 Proporcionar una forma uniforme, coherente e
independiente de la implementación, con el fin de
desplazarse por los elementos de una colección
 Permitir el recorrido de múltiples colecciones,
permitiendo que distintos clientes naveguen
simultáneamente por la misma colección
Patrones de Comportamiento
Iterator (Iterador)
 Descripción
 El interfaz Iterator tiene las siguientes
operaciones básicas
 Navegación: Desplazarse hacia delante (y quizás
hacia atrás)
 Recuperación: Obtener el elemento en la posición
actual
 Control de fin de colección: Determinar si hay un
elemento siguiente
 Algunas versiones extendidas permiten eliminar
el elemento referenciado
Patrones de Comportamiento
Iterator (Iterador)
 Implementación
for(Iterator it = lista.iterator(); it.hasNext();){
Objeto o = it.next();
System.out.println(“Objeto: “+o);
}
Patrones de Comportamiento
Iterator (Iterador)
 Ventajas
 Se simplifica el acceso secuencial a los elementos de
cualquier estructura de datos
 Java 1.5 incorpora un for mejorado para iterar por los
elementos de cualquier colección que implemente Iterable
 Inconvenientes
 En estructuras de datos no ordenadas (conjunto, mapa) el
orden de los elementos al recorrerlos puede ser diferente
en diferentes recorridos, lo cual puede generar problemas
si no se tiene en cuenta
for(Object objeto: lista){
System.out.println(“Objeto: “+objeto);
}
Patrones de Comportamiento
Iterator (Iterador)
 Ejemplo (Ver código)
Patrones de Comportamiento
Iterator (Iterador)
 Variaciones del Patrón
 Existen iteradores que crean una copia de la
estructura de datos al ser creados, por si se
modifica durante el recorrido
 Pueden existir diferentes formas de recorrer
estructuras complejas (árboles, grafos) por tanto,
se podrían implementar diferentes iteradores
Patrones de Comportamiento
Iterator (Iterador)
 Patrones relacionados
 Factory Method (Método Factoría): el método
iterator() es un método factoría
 Visitor (Visitador)
Ejercicio 5
 Implementa los iteradores correspondientes
en el ejercicio del Dispensador de Fracciones
Patrones de Comportamiento
Observer (Observador)
 También conocido como
 Publisher-Subscriptor (Editor-Suscriptor)
 Propiedades del patrón
 Tipo: De comportamiento
 Nivel: Componente
 Propósito
 Proporcionar a los componentes una forma
flexible de enviar mensajes de difusión a los
receptores interesados
Patrones de Comportamiento
Observer (Observador)
 Introducción
 En muchas ocasiones ciertas partes de un sistema deben
conocer un cambio en otras partes
 La solución típica es hacer que la parte que cambia
invoque un método de la parte interesada
 Pero hay veces que la parte que cambia se desarrolla de
forma independiente a la parte interesada
 La parte que cambia es una librería y la parte interesada
está en nuestro programa
 La parte que cambia es genérica y la parte interesada no
se puede determinar (un campo de texto en un interfaz de
usuario)
Patrones de Comportamiento
Observer (Observador)
 ...
 Lo ideal es permitir que los interesados indiquen
a la parte que cambia que están interesados en
los cambios
 Las partes interesadas deben implementar un
interfaz, que posee uno o varios métodos que
serán invocados cuando algo cambie
 La parte que cambia guarda a los interesados en
una lista y cuando algún cambio sucede, les
invoca un método del interfaz
Patrones de Comportamiento
Observer (Observador)
 Aplicabilidad
 Al menos un emisor de mensajes (una parte que cambia y
que notifica el cambio a los demás)
 Uno o más receptores de mensajes
 El emisor no conoce como los receptores actúan ante el
cambio, simplemente lo notifica
 Los receptores pueden no conocerse cuando se desarrolla
el emisor
 Suelen ser muy usados en interfaces gráficas porque los
componentes son observados por la lógica de la aplicación
para actuar en consecuencia
Patrones de Comportamiento
Observer (Observador)
 Descripción
 Considera una factura con líneas de detalle
 El total de la factura depende del total de cada
línea, que a su vez, depende de la cantidad y del
precio por unidad
 Otro tipo de información puede depender del total
de la factura
 El patrón observer es apropiado porque permite
crear la factura completamente y posteriormente
en el desarrollo, actuar ante cambios
Patrones de Comportamiento
Observer (Observador)
 ...
 Los productores de mensajes (componentes observables)
generan eventos. Uno o más receptores de mensajes (los
observadores) reciben esos eventos y actúan en
consecuencia.
 La responsabilidad del componente observable es
transmitir los eventos a los observadores interesados
(aquellos registrados)
 Una interfaz oyente permite a los componentes
observables indicar los eventos que han ocurrido y
posiblemente proporcionar detalles a los observadores
Patrones de Comportamiento
Observer (Observador)
 Implementación
Patrones de Comportamiento
Observer (Observador)
 ...
 Observable
 La clase cuyos objetos son susceptibles de ser
observados
 Proporciona métodos para registrar un observador o
eliminarlo
 Tiene una lista con todos los observadores
registrados
 Tiene un método protegido que es invocado dentro de
la clase cuando haya que notificar un cambio a los
observadores
Patrones de Comportamiento
Observer (Observador)
 ...
 Observer
 Interfaz que usan los Observable para comunicarse
con los interesados
 ConcreteObserver
 Implementa la interfaz Observer y determina en la
implementación de los métodos como responder a los
mensajes recibidos de Observable
 Event
 Mantiene información sobre el evento o cambio
producido que puede ser útil para el Observer
Patrones de Comportamiento
Observer (Observador)
 Ventajas e Inconvenientes
 El objeto observable puede ser relativamente
simple porque las acciones que se desencadenan
ante un cambio no están en la propia clase
 Facilita la realización de pruebas porque se
puede codificar un observador de log
 Facilita el desarrollo incremental porque se
pueden añadir observadores conforme los vayas
codificando
Patrones de Comportamiento
Observer (Observador)
 Ventajas e Inconvenientes...
 El principal problema del patrón es como hacer
los eventos que se envían
 Eventos genéricos
 Son más fáciles de codificar pero puede ser difícil
para un observador saber lo que ha pasado
 Diferentes Eventos concretos
 Los observadores saben con detalle el cambio
 Se complica la codificación de los eventos porque hay
que considerar muchas situaciones
Patrones de Comportamiento
Observer (Observador)
 Variaciones del patrón
 En algunas ocasiones puede soportar
únicamente un único observador
 Componentes observables multihilo, cada
notificación se hace en el hilo del observer
 Envío de la referencia al observable en el propio
evento para que los observers puedan invocar
métodos en el observable con el fin de descubrir
más información sobre el cambio
Patrones de Comportamiento
Observer (Observador)
 Patrones relacionados
 Proxy
 RemoteProxy
Patrones de Comportamiento
Observer (Observador)
 Ejemplo (ver código)
Ejercicio 6
 Independiza la gestión del socket del control
del protocolo de comunicación en la
aplicación de chat
 Utiliza el patrón observer para notificar la
llegada de un mensaje a las partes del
programa interesadas
Patrones Estructurales
 Describen formas efectivas de particionar y
combinar los elementos de una aplicación
 El patrón Adapter permite que dos sistemas
se comuniquen
 El patrón Facade permite presentar una
interfaz simplificada a un usuario sin eliminar
todas las opciones disponibles en el sistema
Patrones Estructurales
 Adapter (Adaptador)
 Sirve como un intermediario entre dos clases,
convirtiendo las interfaces de una clase para que
pueda ser utilizada por otra
 Bridge (Puente)
 Divide un componente complejo en dos jerarquías
relacionadas –la abstracción funcional y la
implementación interna-. Esto hace que sea más
fácil cambiar cualquier aspecto del componente
Patrones Estructurales
 Composite (Compuesto)
 Desarrolla una forma flexible de crear jerarquías
en estructura de árbol de una complejidad
arbitraria, permitiendo a la vez que todos los
elementos de la estructura funcionen con una
interfaz uniforme
 Decorator (Decorador)
 Proporciona una forma flexible de introducir o
eliminar funcionalidad a un componente sin
modificar su apariencia externa o su función
Patrones Estructurales
 Facade (Fachada)
 Proporciona una interfaz simplificada para un grupo de
subsistemas o un sistema complejo
 Flyweight (Peso ligero)
 Reduce el número de objetos detallados de muy bajo nivel
en un sistema mediante la compartición de objetos
 Proxy (Representante)
 Proporciona un representante de otro objeto, por distintas
razones como pueden ser el acceso, la velocidad o la
seguridad
Patrones Estructurales
Composite (Compuesto)
 Propiedades del Patrón
 Tipo: Estructural
 Nivel: Componente
 Propósito
 Desarrollar una forma flexible de crear jerarquías
en estructura de árbol de una complejidad
arbitraria, permitiendo a la vez que todos los
elementos de la estructura funcionen con una
interfaz uniforme
Patrones Estructurales
Composite (Compuesto)
 Introducción
 Se desea gestionar un sistema de ficheros
 Existen directorios que tienen ficheros y otros
subdirectorios, que pueden tener ficheros
 Sin límite de profundidad
 Hay operaciones que se quieren realizar sobre un
directorio o sobre un fichero (tamaño en disco,
permisos…)
Patrones Estructurales
Composite (Compuesto)
 Introducción...
 Para realizar una acción que tenga en cuenta un
subárbol completo, se puede realizar un iterador
que recorra el árbol en un orden determinado y
vaya realizando los cálculos
 El patrón composite propone utilizar el
polimorfismo y la recursividad para realizar
cálculos sobre un subárbol
Patrones Estructurales
Composite (Compuesto)
 Introducción...
Patrones Estructurales
Composite (Compuesto)
 Introducción...
 FileSystemElem: Clase padre de Fichero y
Directorio
 File: Devuelve el tamaño del fichero
 Directory: Devuelve la suma de los
FileSystemElem y añade el tamaño de almacenar
un directorio en disco (p.e 1kbyte)
Patrones Estructurales
Composite (Compuesto)
 Ejemplo (ver código)
Patrones Estructurales
Composite (Compuesto)
 Aplicabilidad
 Cuando exista un componente en estructura
rama-hoja, parte-todo, contenedor-contenido
 La estructura pueda tener cualquier nivel de
profundidad
 Se desea realizar operaciones con todos los
elementos del árbol (o subárbol)
Patrones Estructurales
Composite (Compuesto)
 Descripción
 Component
 Clase o interface padre de todos los elementos del
árbol. Especifica las operaciones
 Composite
 Clase que representa a las ramas. Tienen una
colección de Component
 Node
 Clase hoja, contiene el comportamiento final. No
pueden contener otros componentes
Patrones Estructurales
Composite (Compuesto)
 Implementación
Patrones Estructurales
Composite (Compuesto)
 Ventajas e Inconvenientes
 Proporciona gran flexibilidad en la estructura y
una interfaz muy manejable
 Sin importar la posición actual en la estructura, se
puede llamar a cualquier método del componente
 Al tener tanta flexibilidad es más complicado de
probar
Patrones Estructurales
Composite (Compuesto)
 Variaciones del patrón
 El nodo raíz: para mejorar la manejabilidad del
sistema, algunas implementaciones del patrón
Composite definen un objeto distinto que actúa
como base para el árbol
 Ramificación con reglas: hay veces en
estructuras complejas que es necesario imponer
restricciones en las composiciones
Patrones Estructurales
Composite (Compuesto)
 Patrones relacionados
 Chain of Responsability
 Flyweight
 Iterator
 Visitor
Ejercicio 7
 Crea una estructura de datos orientada a
objetos que permita almacenar expresiones y
que permite calcular su valor
 5 + (5 * (2 – 9))
 8 / ( (14 * 34) + (22 + 4) )

Más contenido relacionado

Similar a Transparencias_Patrones.ppt

Similar a Transparencias_Patrones.ppt (20)

manual de C#
manual de C#manual de C#
manual de C#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Patrones de diseño - Daniel E. Jaramillo
Patrones de diseño - Daniel E. JaramilloPatrones de diseño - Daniel E. Jaramillo
Patrones de diseño - Daniel E. Jaramillo
 
Patrones de diseño de GoF
Patrones de diseño de GoFPatrones de diseño de GoF
Patrones de diseño de GoF
 
INFOGRAFIA.pdf
INFOGRAFIA.pdfINFOGRAFIA.pdf
INFOGRAFIA.pdf
 
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
Msdn Webcast   InyeccióN De Dependencias Con Spring FrameworkMsdn Webcast   InyeccióN De Dependencias Con Spring Framework
Msdn Webcast InyeccióN De Dependencias Con Spring Framework
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
Patron de diseño
Patron de diseñoPatron de diseño
Patron de diseño
 
Abstract Factory
Abstract FactoryAbstract Factory
Abstract Factory
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Unidad i poo avanzada
Unidad i   poo avanzadaUnidad i   poo avanzada
Unidad i poo avanzada
 
Patrones de-diseño-mañana
Patrones de-diseño-mañanaPatrones de-diseño-mañana
Patrones de-diseño-mañana
 
Proyecto en android completado
Proyecto en android completadoProyecto en android completado
Proyecto en android completado
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Patron Singleton
Patron SingletonPatron Singleton
Patron Singleton
 
Instituto tecnológico de tijuana
Instituto tecnológico de tijuanaInstituto tecnológico de tijuana
Instituto tecnológico de tijuana
 
Intro Java
Intro JavaIntro Java
Intro Java
 

Último

CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdfCONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdfErikNivor
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para PlataformasSegundo Silva Maguiña
 
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...ssuser646243
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.ALEJANDROLEONGALICIA
 
3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdf3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdfRicardoRomeroUrbano
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023ANDECE
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasSegundo Silva Maguiña
 
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxTEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxYEDSONJACINTOBUSTAMA
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfAdelaHerrera9
 
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)ssuser6958b11
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...esandoval7
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfIsbelRodrguez
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Final Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos infoFinal Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos infoMEYERQuitoSalas
 
Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfAnonymous0pBRsQXfnx
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
Descubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialDescubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialyajhairatapia
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 

Último (20)

CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdfCONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para Plataformas
 
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
Como de produjo la penicilina de manera masiva en plena guerra mundial Biotec...
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.
 
3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdf3.3 Tipos de conexiones en los transformadores trifasicos.pdf
3.3 Tipos de conexiones en los transformadores trifasicos.pdf
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la Ingenierías
 
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptxTEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
TEC-SEMANA 9-GRUPO1 SENATI SEGURIDAD Y PREVENCIÓN DE RIESGOS.pptx
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
 
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
 
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...Simbología de Soldadura,  interpretacion y aplicacion en dibujo tecnico indus...
Simbología de Soldadura, interpretacion y aplicacion en dibujo tecnico indus...
 
Historia de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdfHistoria de la Arquitectura II, 1era actividad..pdf
Historia de la Arquitectura II, 1era actividad..pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Final Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos infoFinal Ashto método mecánica de suelos info
Final Ashto método mecánica de suelos info
 
Electromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdfElectromagnetismo Fisica FisicaFisica.pdf
Electromagnetismo Fisica FisicaFisica.pdf
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
Descubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundialDescubrimiento de la penicilina en la segunda guerra mundial
Descubrimiento de la penicilina en la segunda guerra mundial
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 

Transparencias_Patrones.ppt

  • 1. Patrones de Diseño con ejercicios en Java micael.gallego@gmail.com
  • 2. ¿Qué es un patrón de diseño?  Es una solución bien documentada que los expertos aplican para solucionar nuevos problemas porque han sido utilizadas con éxito en el pasado  Los expertos identifican partes de un problema que son similares a otros problemas que han encontrado anteriormente  Recuerdan la solución aplicada y la generalizan  Adaptan la solución general al contexto del problema actual
  • 3. ¿Qué es un patrón de diseño?  Son una forma estandarizada para representar soluciones generales de problemas que se encuentran comúnmente en el desarrollo de software orientado a objetos  Beneficios  Catálogos de patrones  Están documentados los pros y los contras de cada patrón. Se conocen las implicaciones de su aplicación  Proporcionan un vocabulario común entre desarrolladores
  • 4. Abstracción y Reutilización  Los patrones suponen una evolución en la abstracción y reutilización en la programación  Abstracción  Resolución de problemas complejos dividiéndolos en otros más simples  Capacidad de ocultar detalles superfluos y centrarse en lo relevante para reducir la complejidad
  • 5. Abstracción y Reutilización  Reutilización  Posibilidad de usar de nuevo código ya desarrollado anteriormente  Formas de reutilización  Copiar y Pegar !!PELIGRO¡¡  Reutilización de algoritmos (búsquedas, ordenaciones, …)  Reutilización de funciones (métodos)  Reutilización de librerías o APIs (métodos, clases, …)
  • 6. Abstracción y Reutilización  Abstracción y Reutilización en Programación Orientada a Objetos  Abstracción funcional y de datos  La encapsulación implica mejor reutilización  La herencia permite formas de reutilización antes no posibles  Es posible desarrollar algoritmos de forma genérica y especializarlos creando clases hijas y redefiniendo o implementando ciertos métodos
  • 7. Abstracción y Reutilización Tipo de Reutilización ¿Se puede aplicar de nuevo? ¿Qué se abstrae? Genericidad Fragmento de código Muy Pobre Nada Muy pobre Estructura de datos Buena Tipos de datos Moderada-Buena Funcional Buena Método Moderada-Buena Tipos Genéricos Buena Operación para tipo Buena Algoritmo Buena Fórmula Buena Clases (Interfaz, Polimorfismo, Clase abstracta) Buena Datos + Métodos Buena API (Librería) Buena Clases útiles Buena-Muy Buena Componente Buena Grupo de Clases Buena-Muy Buena Patrón de Diseño Excelente Solución a un problema Muy Buena
  • 8. Tipos de Patrones  Existen cuatro grandes tipos de patrones de diseño  Patrones de Creación  Patrones de Comportamiento  Patrones Estructurales  Patrones de sistema
  • 9. Tipos de Patrones  Patrones de Creación  Facilitan y simplifican la creación de objetos  Permiten crear objetos sin definir la clase concreta, sólo la interfaz que debe implementar  Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia  Patrones de Comportamiento  Guían el flujo de control del sistema (para facilitar la eficiencia y facilitar el mantenimiento)
  • 10. Tipos de Patrones  Patrones Estructurales  Describen formas efectivas de partir y combinar los elementos de una aplicación  Permiten la comunicación de sistemas incompatibles, la introducción de simplificaciones que mejoren la independencia entre partes,…  Patrones de sistema  Se aplican a la arquitectura de la aplicación  Patrones más generales que los otros tipos
  • 11. ¿Cómo es un patrón?  Los patrones están especificados siguiendo un formulario o formato estándar:  Nombre  También conocido como – Otros nombres usuales  Propiedades  Tipo - Creación, Comportamiento, Estructural o De sistema  Nivel - Clase única, Componente (Grupo de clases), Arquitectónico (Coordina sistemas y subsistemas)  Propósito - ¿Para qué sirve?  Presentación – Problema que soluciona (con ejemplos)  Aplicabilidad – Cuando y por qué debería usarse
  • 12. ¿Cómo es un patrón?  …  Descripción – Que hace y como se comporta de forma detallada  Implementación - ¿Cómo implementarlo?  Ventajas e Inconvenientes  Variantes  Patrones Relacionados  Ejemplo
  • 13. Patrones de Creación  Facilitan y simplifican la creación de objetos  Permiten crear objetos sin definir la clase concreta, sólo el interfaz que debe implementar  Permiten reutilizar otros objetos en vez de crear nuevos debido a restricciones o eficiencia
  • 14. Patrones de Creación  Singleton (Único)  Restringe la creación de un único objeto de una clase en todo el sistema y permite acceder a él  Factory Method (Método Factoría)  Define un método para la creación de objetos además del constructor  Builder (Constructor)  Simplifica la construcción de objetos complejos definiendo una clase cuya responsabilidad es crear objetos de otras clases
  • 15. Patrones de Creación  Abstract Factory (Fábrica Abstracta)  Permite crear objetos de un conjunto de clases relacionadas pero sin especificar la clase concreta, solo el interfaz  Prototype (Prototipo)  Define clases cuyos objetos pueden clonarse  Hay muchos mas…
  • 16. Patrones de Creación Singleton (Único)  Propiedades  Tipo: Creación, Nivel: Objeto  Propósito  Permite tener una única instancia de esta clase en el sistema, y permite que todas las clases tengan acceso a esa instancia
  • 17. Patrones de Creación Singleton (Único)  Introducción  Hay veces que se necesita esta funcionalidad  Por ejemplo: Un histórico de todas las acciones que realiza el usuario en la aplicación. Desde todas las clases se necesita usar el mismo objeto HistoryList  Se podría crear un único objeto y pasar ese objeto como parámetro a todos los demás objetos. Puede no saberse a priori quien va a necesitar el objeto y puede ser complejo estar pasándolo constantemente. Sólo con documentación se puede obligar a que nadie más cree un objeto HistoryList
  • 18. Patrones de Creación Singleton (Único)  Introducción…  Se podría crear el objeto al inicio y colocarlo en un atributo estático. Pero no se podría proporcionar ninguna información de inicialización justo cuando vaya a usarse y no se puede controlar quien accede al objeto
  • 19. Patrones de Creación Singleton (Único)  Aplicabilidad  Cuando se requiera una instancia de una clase y accesible globalmente  Descripción  Asegura crear como máximo una instancia de un objeto.  Ponga el constructor privado  Ponga un método público estático getInstance() que devuelva el objeto. Este método crea la instancia si no se ha creado todavía, la guarda como un atributo estático privado y la devuelve  Se puede crear el objeto directamente sobre el atributo estático
  • 20. Patrones de Creación Singleton (Único)  Implementación  Clase que tiene privado el constructor, mantiene una referencia estática al único objeto de la clase y proporciona un método estático getInstance() para que otras clases accedan al único objeto  El resto de la implementación es completamente normal
  • 21. Patrones de Creación Singleton (Único) import java.util.ArrayList; import java.util.Collections; import java.util.List; public class HistoryList { private static HistoryList instance = new HistoryList(); private List history = new ArrayList(); private HistoryList() { } public static HistoryList getInstance() { return instance; } public void addCommand(String command) { history.add(command); } public Object undoCommand() { return history.remove(history.size() - 1); } ... }
  • 22. Patrones de Creación Singleton (Único)  Ventajas  La clase Singleton es la única que puede crear objetos de la clase, asegurando la unicidad  No se necesita pasar la referencia a todos los objetos que la necesiten, simplificando el desarrollo y haciendo la aplicación más mantenible  Inconvenientes  Puede tener problemas en aplicaciones con muchos hilos de ejecución y con una única instancia  Si en el sistema evoluciona y se necesitan más instancias de la clase, habría que cambiar todos los accesos a la clase Singleton
  • 23. Patrones de Creación Singleton (Único)  Variaciones del patrón  Mantener varias instancias que pueden ser obtenidas con versiones con parámetros del método getInstance(...)  Cuando existen múltiples instancias, pueden ser de clases hijas diferentes dependiendo de los parámetros
  • 24. Patrones de Creación Singleton (Único)  Patrones relacionados  Abstract Factory (Factoría Abstracta)  Builder (Constructor)  Prototype (Prototipo)
  • 25. Patrones de Creación Singleton (Único)  Patrón Singleton en la API de Java  Clase java.awt.Toolkit  Variación del patrón porque Toolkit es abstracta y la instancia devuelta es de una clase hija  El método es getDefaultToolkit()  Clase java.lang.Runtime  El método es getRuntime()  Clase java.text.DateFormat  Variación del patrón porque DateFormat es abstracta  Tiene varios métodos con varias instancias getDateInstance(), getDateInstance(int style), getDateTimeInstance(), …
  • 26. Ejercicio 1  Aplica el patrón Singleton a la clase GestorIO en el juego de las Tres en Raya  De esta forma se conseguirá eficiencia, porque con un objeto GestorIO es suficiente en toda la aplicación
  • 27. Patrones de Creación Prototype (Prototipo)  Propiedades  Tipo: De creación, Nivel: Clase única  Propósito  Facilita la creación de objetos copia de otros objetos
  • 28. Patrones de Creación Prototype (Prototipo)  Introducción  En muchas ocasiones es necesario crear objetos que tengan el mismo estado que otros objetos ya creados  Se podría crear un objeto en su estado inicial y copiar el valor de cada atributo. Pero eso obligaría a desencapsular la clase  El patrón consiste en crear un método copy que cree un objeto con el mismo estado que el que recibe el mensaje de copy
  • 29. Patrones de Creación Prototype (Prototipo)  Aplicabilidad  Se utiliza el patrón Prototype para crear un objeto que sea copia de otro  Descripción  Permite copiar el estado de un objeto  Se puede utilizar en las opciones de “copiar” y “pegar”
  • 30. Patrones de Creación Prototype (Prototipo)  Implementación  Incluir un método de copia (copy)  Este método devuelve un objeto de la misma clase cuyos atributos tienen los mismos valores que los atributos del objeto original  Ventajas e Inconvenientes  Crea copias sin necesidad de que el que necesita la copia conozca todos los atributos de lo copiado  Hay que tener en cuenta la profundidad de la copia (copiar la referencia de un atributo o copiar el atributo en sí)
  • 31. Patrones de Creación Prototype (Prototipo)  Variaciones del patrón  Constructor de copia, que recibe como parámetro un objeto de la misma clase y obtiene de él sus valores  Patrones relacionados  Abstract Factory (Factoría Abstracta)  Factory Method (Método de Fabricación)
  • 32. Patrones de Creación Prototype (Prototipo)  Ejemplo
  • 33. Ejercicio 2  Aplica el patrón Prototype en la clase Lista del ejemplo de las estructuras de datos para copiar la lista  Que se copie la lista, pero no los elementos que contiene  Crea un programa ejemplo para comprobar el correcto funcionamiento del código
  • 34. Patrones de Creación Factory Method (Método Factoría)  También conocido como  Virtual Builder (Constructor Virtual)  Propiedades  Tipo: De creación, Nivel: Clase  Propósito  Permite definir un método estándar en una clase para crear objetos. Las subclases deciden la clase concreta que crear
  • 35. Patrones de Creación Factory Method (Método Factoría)  Introducción  Supongamos una aplicación de gestión de una lista, que permita borrar, editar y añadir valores  Esta aplicación tiene dos partes, la interfaz de usuario (un menú en modo texto) y la Lista.  La lista tiene un método para poner un valor (String) en una determinada posición (int)  public void set(int position, String value)
  • 36. Patrones de Creación Factory Method (Método Factoría)  …  Se quiere generalizar la aplicación incorporando una estructura de datos tipo mapa (clave,valor)  Creamos la clase abstracta EstructuraDatos (de la que heredan Lista y Mapa). Creamos la clase abstracta Selector (de la que heredan SLista y SMapa)  El menú usa objetos de EstructuraDatos y Selector.  De esta forma se pueden incorporar nuevas estructuras de datos
  • 37. Patrones de Creación Factory Method (Método Factoría)  …  El problema está en que el menú tiene que construir objetos de la clase Selector cuando le pregunta al usuario, pero no sabe que clase instanciar, si SLista o SMapa.  El patrón Método Factoría propone que exista un método en EstructuraDatos que permita crear el objeto Selector correspondiente  (Ver ejemplo)
  • 38. Patrones de Creación Factory Method (Método Factoría)  Ejemplo (ver código)
  • 39. Patrones de Creación Factory Method (Método Factoría)  Aplicabilidad  Cuando se quiera crear un framework extensible.  Cuando una subclase decide que objeto crear  Sabe cuando crear un objeto, pero su clase depende de la clase de otro objeto
  • 40. Patrones de Creación Factory Method (Método Factoría)  Descripción  Existe un método de fabricación en una clase abstracta (Creator) que debe ser implementado por las clases hijas (ConcreteCreator).  Ese método devuelve objetos que heredan de una clase abstracta (Product)  Son las ConcreteCreator las que deciden la clase que hereda de Product (CocreteProduct) que deben instanciar
  • 41. Patrones de Creación Factory Method (Método Factoría)  Implementación
  • 42. Patrones de Creación Factory Method (Método Factoría)  Ventajas e Inconvenientes  Con el polimorfismo podemos hacer código genérico para una clase. Con este patrón podemos hacer código genérico para varias clases y el código genérico puede instanciar objetos cuando quiere  El inconveniente es que para añadir un producto nuevo hay que cambiar varias clases
  • 43. Patrones de Creación Factory Method (Método Factoría)  Variaciones del Patrón  Creator puede tener factoryMethod concreto y proporcionar una implementación por defecto  El método de fabricación puede tomar parámetros y puede instanciar los ConcreteProduct dependiendo del parámetro  Creator y Product pueden ser interfaces  Patrones relacionados  Abstract Factory (Fábrica Abstracta)  Prototype (Prototipo)  Template Method (Método Plantilla)
  • 44. Ejercicio 3  Incorpora una nueva implementación del Tablero del juego de las Tres en Raya.  Las columnas deben identificarse mediante letras (A,B,C…)  Habrá que crear otra implementación de Coordenada con las columnas como letras  Usar el patrón Factory Method al instanciar objetos de alguna clase concreta de coordenada
  • 45. Patrones de Comportamiento  Están relacionados con el flujo de control del sistema  Ciertas formas de organizar el control en un sistema pueden derivar en grandes beneficios para la eficiencia y el mantenimiento del sistema
  • 46. Patrones de Comportamiento  Chain of Responsability (Cadena de Responsabilidad)  Establece una cadena en un sistema, para que un mensaje pueda ser manejado en el nivel en el que se recibe en primer lugar o ser redirigido a otro objeto que pueda manejarlo  Command (Comando)  Encapsula un comando en un objeto de tal forma que pueda ser almacenado, pasado a métodos y devuelto igual que otro objeto  Interpreter (Intérprete)  Define un intérprete para un lenguaje
  • 47. Patrones de Comportamiento  Iterator (Iterador)  Proporciona una forma coherente de acceder secuencialmente a los elementos de una colección, independientemente del tipo de colección  Mediator (Mediador)  Simplifica la comunicación entre los objetos de un sistema introduciendo un único objeto que gestiona la distribución de mensajes entre los otros
  • 48. Patrones de Comportamiento  Observer (Observador)  Proporciona a los componentes una forma flexible de enviar mensajes de difusión a los receptores interesados  State (Estado)  Permite modificar fácilmente el comportamiento de un objeto en tiempo de ejecución  Strategy (Estrategia)  Define un grupo de clases que representa un conjunto de posibles comportamientos. Estos comportamientos pueden ser fácilmente intercambiados.
  • 49. Patrones de Comportamiento  Visitor (Visitante)  Proporciona una forma fácil y sostenible de ejecutar acciones en una familia de clases. Este patrón centraliza los comportamientos y permite que sean modificados o ampliados sin cambiar las clases sobre las que actúan
  • 50. Patrones de Comportamiento Command (Comando)  Propiedades  Tipo: De comportamiento  Nivel: Objeto  Propósito  Encapsular un comando en un objeto de tal forma que pueda ser almacenado, pasado a métodos y devuelto igual que cualquier otro objeto
  • 51. Patrones de Comportamiento Command (Comando)  Introducción  Cuando un usuario selecciona una acción para ejecutarla, la aplicación necesita saber desde dónde obtener los datos y el comportamiento relevantes  Normalmente, la aplicación mantendrá la lógica en un lugar centralizado  Los usuarios pueden necesitar deshacer las acciones realizadas  Es lógico combinar la acción en un objeto: el objeto comando. Ese objeto tiene el comportamiento y los datos necesario para una acción específica
  • 52. Patrones de Comportamiento Command (Comando)  Aplicabilidad  Dar soporte para deshacer comandos, procesos de identificación, etc...  Poner en cola y ejecutar comandos en momentos distintos  Desacoplar la fuente de una petición del objeto que la cumple
  • 53. Patrones de Comportamiento Command (Comando)  Descripción  Una aplicación que no use el patrón Command tendrá que proporcionar una clase manejadora de código para controlar todos los eventos que puedan ocurrir  El patrón Command encapsula los datos y funcionalidad necesarias para cumplir una acción o una petición específicas  Proporciona una separación entre cuándo hay que ejecutar una acción y cómo tiene que ser ejecutada
  • 54. Patrones de Comportamiento Command (Comando)  Implementación
  • 55. Patrones de Comportamiento Command (Comando)  ...  Command: Interfaz de todos los comandos  Invoker: El que decide cuando ejecutar el comando  Receiver: El objeto sobre el que se ejecutará el comando  ConcreteCommand: Implementación de Command. Mantiene una referencia al Receiver para realizar las acciones cuando se le llama a execute
  • 56. Patrones de Comportamiento Command (Comando)  Ventajas  Desacopla la fuente o el disparador del evento del objeto que tiene conocimiento para ejecutar la tarea  Permite reemplazar los objetos command y receiver en tiempo de ejecución  Al ser los comando objetos normales, es más sencillo hacer log, deshacer, ...  Facilita la introducción de nuevos comandos, tan sólo creando una nueva implementación de command
  • 57. Patrones de Comportamiento Command (Comando)  Variaciones  Deshacer: El patrón command puede ser extendido para incorporar la posibilidad de deshacer. Al realizar la acción se guarda lo necesario para deshacer la acción y se incorpora un método undo()  MacroCommand: Se puede crear un comando que esté compuesto por otros comandos y que pueda ser gestionado de manera uniforme (usando el patrón Composite)
  • 58. Patrones de Comportamiento Command (Comando)  Patrones relacionados  Composite (Compuesto): Para implementar el patrón compuesto  Memento (Recuerdo): Guarda el estado del receptor, para crear el deshacer  Prototype (Prototipo): Puede ser usado para copiar el comando antes de incluirlo en el historial  Singletón (Único): En la mayoría de las aplicaciones, el historial se implementa como un singleton
  • 59. Patrones de Comportamiento Command (Comando)  Ejemplo (ver código)  En la aplicación de citas se incorpora un comando con opciones de deshacer
  • 60. Ejercicio 4  Incorpora el patrón Command en el programa de gestión de estructuras de datos en el que se permita la acción de deshacer
  • 61. Patrones de Comportamiento Iterator (Iterador)  También conocido como  Cursor  Propiedades del patrón  Tipo: De comportamiento  Nivel: Componente  Propósito  Proporcionar una forma coherente de acceder secuencialmente a los elementos de una colección, independientemente del tipo de colección subyacente
  • 62. Patrones de Comportamiento Iterator (Iterador)  Introducción  Las estructuras de datos pueden estar implementadas de muchas formas  Pueden usarse arrays, listas enlazadas o árboles (por si los elementos están ordenados)  Lo habitual es recorrer secuencialmente los elementos de la colección
  • 63. Patrones de Comportamiento Iterator (Iterador)  ...  Usar un índice que se va incrementando podría ser muy ineficiente para implementaciones basadas en árboles o listas enlazadas  El patrón Iterator resuelve este problema definiendo una interfaz uniforme y eficiente para recorrer cualquier estructura de datos de forma secuencial, independientemente de su implementación for(int i=0; i<lista.size(); i++){ System.out.println(“Elemento:“+lista.get(i)); }
  • 64. Patrones de Comportamiento Iterator (Iterador)  Aplicabilidad  Proporcionar una forma uniforme, coherente e independiente de la implementación, con el fin de desplazarse por los elementos de una colección  Permitir el recorrido de múltiples colecciones, permitiendo que distintos clientes naveguen simultáneamente por la misma colección
  • 65. Patrones de Comportamiento Iterator (Iterador)  Descripción  El interfaz Iterator tiene las siguientes operaciones básicas  Navegación: Desplazarse hacia delante (y quizás hacia atrás)  Recuperación: Obtener el elemento en la posición actual  Control de fin de colección: Determinar si hay un elemento siguiente  Algunas versiones extendidas permiten eliminar el elemento referenciado
  • 66. Patrones de Comportamiento Iterator (Iterador)  Implementación for(Iterator it = lista.iterator(); it.hasNext();){ Objeto o = it.next(); System.out.println(“Objeto: “+o); }
  • 67. Patrones de Comportamiento Iterator (Iterador)  Ventajas  Se simplifica el acceso secuencial a los elementos de cualquier estructura de datos  Java 1.5 incorpora un for mejorado para iterar por los elementos de cualquier colección que implemente Iterable  Inconvenientes  En estructuras de datos no ordenadas (conjunto, mapa) el orden de los elementos al recorrerlos puede ser diferente en diferentes recorridos, lo cual puede generar problemas si no se tiene en cuenta for(Object objeto: lista){ System.out.println(“Objeto: “+objeto); }
  • 68. Patrones de Comportamiento Iterator (Iterador)  Ejemplo (Ver código)
  • 69. Patrones de Comportamiento Iterator (Iterador)  Variaciones del Patrón  Existen iteradores que crean una copia de la estructura de datos al ser creados, por si se modifica durante el recorrido  Pueden existir diferentes formas de recorrer estructuras complejas (árboles, grafos) por tanto, se podrían implementar diferentes iteradores
  • 70. Patrones de Comportamiento Iterator (Iterador)  Patrones relacionados  Factory Method (Método Factoría): el método iterator() es un método factoría  Visitor (Visitador)
  • 71. Ejercicio 5  Implementa los iteradores correspondientes en el ejercicio del Dispensador de Fracciones
  • 72. Patrones de Comportamiento Observer (Observador)  También conocido como  Publisher-Subscriptor (Editor-Suscriptor)  Propiedades del patrón  Tipo: De comportamiento  Nivel: Componente  Propósito  Proporcionar a los componentes una forma flexible de enviar mensajes de difusión a los receptores interesados
  • 73. Patrones de Comportamiento Observer (Observador)  Introducción  En muchas ocasiones ciertas partes de un sistema deben conocer un cambio en otras partes  La solución típica es hacer que la parte que cambia invoque un método de la parte interesada  Pero hay veces que la parte que cambia se desarrolla de forma independiente a la parte interesada  La parte que cambia es una librería y la parte interesada está en nuestro programa  La parte que cambia es genérica y la parte interesada no se puede determinar (un campo de texto en un interfaz de usuario)
  • 74. Patrones de Comportamiento Observer (Observador)  ...  Lo ideal es permitir que los interesados indiquen a la parte que cambia que están interesados en los cambios  Las partes interesadas deben implementar un interfaz, que posee uno o varios métodos que serán invocados cuando algo cambie  La parte que cambia guarda a los interesados en una lista y cuando algún cambio sucede, les invoca un método del interfaz
  • 75. Patrones de Comportamiento Observer (Observador)  Aplicabilidad  Al menos un emisor de mensajes (una parte que cambia y que notifica el cambio a los demás)  Uno o más receptores de mensajes  El emisor no conoce como los receptores actúan ante el cambio, simplemente lo notifica  Los receptores pueden no conocerse cuando se desarrolla el emisor  Suelen ser muy usados en interfaces gráficas porque los componentes son observados por la lógica de la aplicación para actuar en consecuencia
  • 76. Patrones de Comportamiento Observer (Observador)  Descripción  Considera una factura con líneas de detalle  El total de la factura depende del total de cada línea, que a su vez, depende de la cantidad y del precio por unidad  Otro tipo de información puede depender del total de la factura  El patrón observer es apropiado porque permite crear la factura completamente y posteriormente en el desarrollo, actuar ante cambios
  • 77. Patrones de Comportamiento Observer (Observador)  ...  Los productores de mensajes (componentes observables) generan eventos. Uno o más receptores de mensajes (los observadores) reciben esos eventos y actúan en consecuencia.  La responsabilidad del componente observable es transmitir los eventos a los observadores interesados (aquellos registrados)  Una interfaz oyente permite a los componentes observables indicar los eventos que han ocurrido y posiblemente proporcionar detalles a los observadores
  • 78. Patrones de Comportamiento Observer (Observador)  Implementación
  • 79. Patrones de Comportamiento Observer (Observador)  ...  Observable  La clase cuyos objetos son susceptibles de ser observados  Proporciona métodos para registrar un observador o eliminarlo  Tiene una lista con todos los observadores registrados  Tiene un método protegido que es invocado dentro de la clase cuando haya que notificar un cambio a los observadores
  • 80. Patrones de Comportamiento Observer (Observador)  ...  Observer  Interfaz que usan los Observable para comunicarse con los interesados  ConcreteObserver  Implementa la interfaz Observer y determina en la implementación de los métodos como responder a los mensajes recibidos de Observable  Event  Mantiene información sobre el evento o cambio producido que puede ser útil para el Observer
  • 81. Patrones de Comportamiento Observer (Observador)  Ventajas e Inconvenientes  El objeto observable puede ser relativamente simple porque las acciones que se desencadenan ante un cambio no están en la propia clase  Facilita la realización de pruebas porque se puede codificar un observador de log  Facilita el desarrollo incremental porque se pueden añadir observadores conforme los vayas codificando
  • 82. Patrones de Comportamiento Observer (Observador)  Ventajas e Inconvenientes...  El principal problema del patrón es como hacer los eventos que se envían  Eventos genéricos  Son más fáciles de codificar pero puede ser difícil para un observador saber lo que ha pasado  Diferentes Eventos concretos  Los observadores saben con detalle el cambio  Se complica la codificación de los eventos porque hay que considerar muchas situaciones
  • 83. Patrones de Comportamiento Observer (Observador)  Variaciones del patrón  En algunas ocasiones puede soportar únicamente un único observador  Componentes observables multihilo, cada notificación se hace en el hilo del observer  Envío de la referencia al observable en el propio evento para que los observers puedan invocar métodos en el observable con el fin de descubrir más información sobre el cambio
  • 84. Patrones de Comportamiento Observer (Observador)  Patrones relacionados  Proxy  RemoteProxy
  • 85. Patrones de Comportamiento Observer (Observador)  Ejemplo (ver código)
  • 86. Ejercicio 6  Independiza la gestión del socket del control del protocolo de comunicación en la aplicación de chat  Utiliza el patrón observer para notificar la llegada de un mensaje a las partes del programa interesadas
  • 87. Patrones Estructurales  Describen formas efectivas de particionar y combinar los elementos de una aplicación  El patrón Adapter permite que dos sistemas se comuniquen  El patrón Facade permite presentar una interfaz simplificada a un usuario sin eliminar todas las opciones disponibles en el sistema
  • 88. Patrones Estructurales  Adapter (Adaptador)  Sirve como un intermediario entre dos clases, convirtiendo las interfaces de una clase para que pueda ser utilizada por otra  Bridge (Puente)  Divide un componente complejo en dos jerarquías relacionadas –la abstracción funcional y la implementación interna-. Esto hace que sea más fácil cambiar cualquier aspecto del componente
  • 89. Patrones Estructurales  Composite (Compuesto)  Desarrolla una forma flexible de crear jerarquías en estructura de árbol de una complejidad arbitraria, permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniforme  Decorator (Decorador)  Proporciona una forma flexible de introducir o eliminar funcionalidad a un componente sin modificar su apariencia externa o su función
  • 90. Patrones Estructurales  Facade (Fachada)  Proporciona una interfaz simplificada para un grupo de subsistemas o un sistema complejo  Flyweight (Peso ligero)  Reduce el número de objetos detallados de muy bajo nivel en un sistema mediante la compartición de objetos  Proxy (Representante)  Proporciona un representante de otro objeto, por distintas razones como pueden ser el acceso, la velocidad o la seguridad
  • 91. Patrones Estructurales Composite (Compuesto)  Propiedades del Patrón  Tipo: Estructural  Nivel: Componente  Propósito  Desarrollar una forma flexible de crear jerarquías en estructura de árbol de una complejidad arbitraria, permitiendo a la vez que todos los elementos de la estructura funcionen con una interfaz uniforme
  • 92. Patrones Estructurales Composite (Compuesto)  Introducción  Se desea gestionar un sistema de ficheros  Existen directorios que tienen ficheros y otros subdirectorios, que pueden tener ficheros  Sin límite de profundidad  Hay operaciones que se quieren realizar sobre un directorio o sobre un fichero (tamaño en disco, permisos…)
  • 93. Patrones Estructurales Composite (Compuesto)  Introducción...  Para realizar una acción que tenga en cuenta un subárbol completo, se puede realizar un iterador que recorra el árbol en un orden determinado y vaya realizando los cálculos  El patrón composite propone utilizar el polimorfismo y la recursividad para realizar cálculos sobre un subárbol
  • 95. Patrones Estructurales Composite (Compuesto)  Introducción...  FileSystemElem: Clase padre de Fichero y Directorio  File: Devuelve el tamaño del fichero  Directory: Devuelve la suma de los FileSystemElem y añade el tamaño de almacenar un directorio en disco (p.e 1kbyte)
  • 97. Patrones Estructurales Composite (Compuesto)  Aplicabilidad  Cuando exista un componente en estructura rama-hoja, parte-todo, contenedor-contenido  La estructura pueda tener cualquier nivel de profundidad  Se desea realizar operaciones con todos los elementos del árbol (o subárbol)
  • 98. Patrones Estructurales Composite (Compuesto)  Descripción  Component  Clase o interface padre de todos los elementos del árbol. Especifica las operaciones  Composite  Clase que representa a las ramas. Tienen una colección de Component  Node  Clase hoja, contiene el comportamiento final. No pueden contener otros componentes
  • 100. Patrones Estructurales Composite (Compuesto)  Ventajas e Inconvenientes  Proporciona gran flexibilidad en la estructura y una interfaz muy manejable  Sin importar la posición actual en la estructura, se puede llamar a cualquier método del componente  Al tener tanta flexibilidad es más complicado de probar
  • 101. Patrones Estructurales Composite (Compuesto)  Variaciones del patrón  El nodo raíz: para mejorar la manejabilidad del sistema, algunas implementaciones del patrón Composite definen un objeto distinto que actúa como base para el árbol  Ramificación con reglas: hay veces en estructuras complejas que es necesario imponer restricciones en las composiciones
  • 102. Patrones Estructurales Composite (Compuesto)  Patrones relacionados  Chain of Responsability  Flyweight  Iterator  Visitor
  • 103. Ejercicio 7  Crea una estructura de datos orientada a objetos que permita almacenar expresiones y que permite calcular su valor  5 + (5 * (2 – 9))  8 / ( (14 * 34) + (22 + 4) )