¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Patrones de diseño en Java
  3. El patrón Mediator
Extrait - Patrones de diseño en Java Los 23 modelos de diseño: descripciónes y soluciónes ilustradas en UML 2 y Java [3ª edición]
Extractos del libro
Patrones de diseño en Java Los 23 modelos de diseño: descripciónes y soluciónes ilustradas en UML 2 y Java [3ª edición] Volver a la página de compra del libro

El patrón Mediator

Descripción

El patrón Mediator tiene como objetivo construir un objeto cuya vocación es la gestión y el control de las interacciones en un conjunto de objetos sin que sus elementos deban conocerse mutuamente.

Ejemplo

El diseño orientado a objetos favorece la distribución del comportamiento entre los objetos del sistema. No obstante, llevada al extremo, esta distribución puede llevar a tener un gran número de enlaces que obligan casi a cada objeto a conocer a todos los demás objetos del sistema. Un diseño con tal cantidad de enlaces puede volverse de mala calidad. En efecto, la modularidad y las posibilidades de reutilización de los objetos se reducen. Cada objeto no puede trabajar sin los demás y el sistema se vuelve monolítico, perdiendo toda su modularidad. Además para adaptar y modificar el comportamiento de una pequeña parte del sistema, resulta necesario definir numerosas subclases.

Las interfaces de usuario dinámicas son un buen ejemplo de tal sistema. Una modificación en el valor de un control gráfico puede conducir a modificar el aspecto de otros controles gráficos como, por ejemplo:

  • Volverse visible u oculto.

  • Modificar el número de valores posibles (para un menú).

  • Cambiar el formato de los valores que es necesario informar.

La primera posibilidad consiste en enlazar cada control cuyo aspecto cambia en función de su valor. Esta posibilidad presenta los inconvenientes citados anteriormente.

La otra posibilidad consiste en implementar el patrón Mediator. Éste consiste en construir un objeto central encargado de la coordinación...

Estructura

1. Diagrama de clases

La figura 4-6.3 detalla la estructura genérica del patrón.

images/figure22-3.png

Figura 4-6.3 - Estructura del patrón Mediator

2. Participantes

Los participantes del patrón son los siguientes:

  • Mediador define la interfaz del mediador para los objetos Elemento.

  • MediadorConcreto (Formulario) implementa la coordinación entre los elementos y gestiona las asociaciones con los elementos.

  • Elemento (Control) es la clase abstracta de los elementos que incluyen sus atributos, asociaciones y métodos comunes.

  • ElementoConcreto1 y ElementoConcreto2 (PopupMenú, ZonaInformación y Botón) son las clases concretas de los elementos que se comunican con el mediador en lugar de con los demás elementos.

3. Colaboraciones

Los elementos envían y reciben mensajes del mediador. El mediador implementa la colaboración y la coordinación entre los elementos.

Dominios de aplicación

El patrón se utiliza en los casos siguientes:

  • Un sistema está formado por un conjunto de objetos basado en una comunicación compleja que conduce a asociar numerosos objetos entre ellos.

  • Los objetos de un sistema son difíciles de reutilizar puesto que poseen numerosas asociaciones con otros objetos.

  • La modularidad de un sistema es mediocre, obligando en los casos en los que se debe adaptar una parte del sistema a escribir numerosas subclases.

Ejemplo en Java

A continuación proponemos simular la información de un formulario con la ayuda de entradas/salidas clásicas basada en una introducción secuencial de datos en cada control hasta que se valida el botón "OK" (mediante el teclado). Un menú permite elegir si el préstamo se realiza o no con un coprestatario.

El código fuente escrito en Java de la clase Control se muestra a continuación.

public abstract class Control  
{  
    protected String valor = "";  
    public Formulario director;  
    public String nombre;  
  
    public Control(String nombre)  
    {  
        setNombre(nombre);  
    }  
  
    public String getNombre()   
    {   
        return nombre; 
 
    } 
  
    protected void setNombre(String nombre)   
    {   
        this.nombre = nombre;   
    }   
      
    protected Formulario getDirector()   
    {   
        return director;   
    }   
    
    public void setDirector(Formulario director)   
    {   
        this.director = director;   
    }   
    
    public String getValor()   
    {   
        return valor;   
    }   
    protected void setValor(String valor)   
    {   
        this.valor = valor;   
    }   ...