Está en la página 1de 6

Versión 1.

 
 

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. 

 

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 

 
 

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 

 
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 

 
 

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 

 
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 

También podría gustarte