Documentos de Académico
Documentos de Profesional
Documentos de Cultura
RESUMEN PATRONES DE
COMPORTAMIENTO
Este documento presenta un resumen de los patrones de
comportamiento presentados en el libro de Gamma et al. que puede
utilizarse como referencia para su estudio.
1
Patrones de Diseño. Patrones de
Comportamiento
Los patrones estructurales:
1. Chain of Responsibility (Cadena de responsabilidad)
2. Command (Orden)
3. Interpreter (Intérprete)
4. Iterator (Iterador)
5. Mediator (Mediador)
6. Memento (Recuerdo)
7. Observer (Observador)
8. State (Estado)
9. Strategy (Estrategia)
10. Template Method (Método plantilla)
11. Visitor (Visitante)
Chain of Responsibility (Cadena de responsabilidad)
Definición
Permite establecer una cadena de objetos receptores a través de los cuales se pasa una
petición formulada por un objeto emisor. Cualquiera de los objetos receptores puede
responder a la petición en función de un criterio establecido.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación que muestra como funciona la cadena de responsabilidad,
para una empresa donde hay que pedir autorización para realizar un gasto. El que decide si
se puede hacer el gasto en función de la cantidad puede ser tu jefe, el jefe de tu jefe, etc. Para
una cadena: Directive Director Vicepresidente Presidente, podemos ver
ChainResponsability.java. Cuyo resultado sería:
¿Cuanto dinero quieres gastar?
>40000
¡Tu solicitud para gastar $40000.0 requiere una reunión del equipo de dirección!
¿Cuanto dinero quieres gastar?
>20000
El presidente puede aprobar la cantidad de $20000.0
¿Cuanto dinero quieres gastar?
>10000
El Vice‐presidente puede aprobar la cantidad de $10000.0
Patrones de Diseño. Patrones de Comportamiento
2
Command (Orden)
Definición
Permite solicitar una operación a un objeto sin conocer realmente el contenido de esta
operación ni el receptor real de la misma. Para ello, se encapsula la petición como un objeto,
con lo que además se facilita la parametrización de los métodos.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación que controla el estado de un ventilador y una luz. Dentro de
la aplicación hay un interruptor (Switch) que usa la misma orden para encender y apagar
tanto el ventilador como la luz. Se puede ver como se hace usando el patrón Orden en
en Command.java
Interpreter (Intérprete)
Definición
Permite que, dado un lenguaje, defina una representación para su gramática junto con un
intérprete del lenguaje. Se usa para definir un lenguaje que represente expresiones regulares
de cadenas a buscar dentro de otras cadenas. Además, en general, para definir un lenguaje que
permita representar las distintas instancias de una familia de problemas.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación que acepta como entrada un número en formato romano,
como por ejemplo, MCMXXVIII, y devuelve el número correspondiente, 1928. El programa
tiene varios sub‐interpretes que procesan partes del número original, como se puede ver en
Interpreter.java
Iterator (Iterador)
Definición
Permite definir una interfaz que declara los métodos necesarios para acceder
secuencialmente a un grupo de objetos de una colección. Algunos de los métodos que
podemos definir en la interfaz Iterador son: Primero(), Siguiente(), HayMas() y
ElementoActual().
Véase el ejemplo de Wikipedia
Otro ejemplo
Supongamos que tenemos un contenedor (por ejemplo, un vector) y queremos tener una
forma de acceder a los elementos sin mostrar los detalles. Un objeto contenedor debe permitir
una forma de recorrer sus elementos sin exponer su estructura interna, es decir, separar el
contenedor de la forma de recorrer sus elementos. Con este patrón tenemos la ventaja de
Patrones de Diseño. Patrones de Comportamiento
3
simplificar la interfaz de un contenedor, ya que éste no contendrá los métodos de recorrerlo.
Un ejemplo típico lo tenemos en Java. El cliente solicita al contenedor un iterador. A
continuación el iterador dirige la forma de recorrer el contenedor:
Vector vec = new Vector();
vec.add( new String( "hola“ ) );
vec.add( new String( "adios“ ) );
Iterator it = vec.iterator();
while ( it.hasNext() )
System.out.println( (String) it.next() );
Mediator (Mediador)
Definición
Permite que un objeto haga de procesador central, coordinando las relaciones entre sus
asociados o participantes. Permite la interacción de varios objetos, sin generar acoplamientos
fuertes en esas relaciones. Todos los objetos se comunican con un mediador y es éste quién
realiza la comunicación con el resto.
Ejemplo
Podemos imaginar una aplicación de una torre de control en un aeropuerto. Los pilotos en los
aviones que van llegando comunican con la torre, en vez de comunicar entre ellos. La torre
decide qué avión puede despegar y aterrizan. Se puede ver la aplicación en Mediator.java
Memento (Recuerdo)
Definición
Permite almacenar el estado de un objeto (o del sistema completo) en un momento dado de
manera que se pueda restaurar en ese punto de manera sencilla. Para ello se mantiene
almacenado el estado del objeto durante un instante en una clase independiente de aquella a
la que pertenece el objeto (pero sin romper la encapsulación), de forma que ese recuerdo
permita que el objeto sea modificado y pueda volver a su estado anterior.
Véase el ejemplo de Wikipedia
Otro ejemplo
Imaginamos una aplicación que puede fijar el estado de un objeto y luego guardar el estado en
un Memento para recuperarlo más adelante, como se puede ver en Memento.java cuyo
resultado de ejecución es:
Emisor: Fijando estado a Estado1
Emisor: Fijando estado a Estado2
Emisor: Almacenando en Memento.
Emisor: Fijando estado a Estado3
Emisor: Almacenando en Memento.
Emisor: Fijando estado a Estado4
Emisor: Estado después de recuperación del Memento: Estado3
Patrones de Diseño. Patrones de Comportamiento
4
Observer (Observador)
Definición
Permite definir una dependencia del tipo uno‐a‐muchos entre objetos, de manera que cuando
uno de los objetos cambia su estado, el observador se encarga de notificar este cambio a todos
los otros dependientes. El objetivo de este patrón es desacoplar la clase de los objetos clientes
del objeto, aumentando la modularidad del lenguaje, así como evitar bucles de actualización
(espera activa o polling).
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación donde un sujeto notifica al observador cuando cambia del
estado. En este caso, el cliente llama un método en el sujeto directamente, como se puede ver
en Oberserver.java
State (Estado)
Definición
Se utiliza cuando el comportamiento de un objeto cambia dependiendo del estado del mismo.
Por ejemplo: una alarma puede tener diferentes estados, como desactivada, activada, en
configuración. Definimos una interfaz Estado_Alarma y luego definimos los diferentes estados.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación sencilla que usa un poco de lógica condicional para cambiar
entre estados, como se puede ver en State.java
Strategy (Estrategia)
Definición
Permite determinar cómo se debe realizar el intercambio de mensajes entre diferentes
objetos para resolver una tarea. El patrón estrategia permite mantener un conjunto de
algoritmos de entre los cuales el objeto cliente puede elegir aquel que le conviene e
intercambiarlo dinámicamente según sus necesidades.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación que simula diferentes métodos de generación de una “frase
del día” que muestre este patrón, en Strategy.java
Template Method (Método plantilla)
Definición
Permite definir una estructura algorítmica en la superclase, delegando la implementación a
Patrones de Diseño. Patrones de Comportamiento
5
las subclases. Es decir, define una serie de pasos, donde los pasos serán redefinidos en las
subclases.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación para procesar solicitudes de préstamo, donde cada sub‐
clase tiene que comprobar factores diferentes, que se puede ver en Template.java
Visitor (Visitante)
Definición
Permite separar el algoritmo de la estructura de un objeto.
Véase el ejemplo de Wikipedia
Otro ejemplo
Podemos imaginar una aplicación sencilla que separa la estructura de los objetos del código
que opera sobre ellos, como se ve en Visitor.java
Patrones de Diseño. Patrones de Comportamiento