Patrón de diseño de mediador

El patrón de diseño de mediador es uno de los patrones de diseño de comportamiento importantes y ampliamente utilizados. Mediator permite el desacoplamiento de objetos mediante la introducción de una capa en el medio para que la interacción entre los objetos ocurra a través de la capa. Si los objetos interactúan entre sí directamente, los componentes del sistema están estrechamente acoplados entre sí, lo que aumenta el costo de mantenimiento y no es difícil de extender. El patrón de mediador se centra en proporcionar un mediador entre objetos para la comunicación y ayudar a implementar el acoplamiento perdido entre objetos.

El controlador de tráfico aéreo es un gran ejemplo de patrón de mediador en el que la sala de control del aeropuerto funciona como mediador para la comunicación entre diferentes vuelos. Mediator funciona como un enrutador entre objetos y puede tener su propia lógica para proporcionar una forma de comunicación.

Patrón de diseño de mediador de diagrama UML

Componentes de diseño

  • Mediador: Define la interfaz para la comunicación entre objetos colegas.
  • ConcreteMediator : implementa la interfaz del mediador y coordina la comunicación entre objetos colegas.
  • Colega : Define la interfaz para la comunicación con otros colegas
  • ConcreteColleague: Implementa la interfaz de colega y se comunica con otros colegas a través de su mediador.

Veamos un ejemplo del patrón de diseño Mediator.

class ATCMediator implements IATCMediator 
{
    private Flight flight;
    private Runway runway;
    public boolean land;
  
    public void registerRunway(Runway runway) 
    {
        this.runway = runway;
    }
  
    public void registerFlight(Flight flight) 
    {
        this.flight = flight;
    }
  
    public boolean isLandingOk() 
    {
        return land;
    }
  
    @Override
    public void setLandingStatus(boolean status) 
    {
        land = status;
    }
}
  
interface Command 
{
    void land();
}
  
interface IATCMediator
{
  
    public void registerRunway(Runway runway);
  
    public void registerFlight(Flight flight);
  
    public boolean isLandingOk();
  
    public void setLandingStatus(boolean status);
}
  
class Flight implements Command 
{
    private IATCMediator atcMediator;
  
    public Flight(IATCMediator atcMediator) 
    {
        this.atcMediator = atcMediator;
    }
  
    public void land() 
    {
        if (atcMediator.isLandingOk()) 
        {
            System.out.println("Successfully Landed.");
            atcMediator.setLandingStatus(true);
        }
        else
            System.out.println("Waiting for landing.");
    }
  
    public void getReady() 
    {
        System.out.println("Ready for landing.");
    }
  
}
  
class Runway implements Command 
{
    private IATCMediator atcMediator;
  
    public Runway(IATCMediator atcMediator) 
    {
        this.atcMediator = atcMediator;
        atcMediator.setLandingStatus(true);
    }
  
    @Override
    public void land() 
    {
        System.out.println("Landing permission granted.");
        atcMediator.setLandingStatus(true);
    }
  
}
  
class MediatorDesignPattern 
{
    public static void main(String args[]) 
    {
  
        IATCMediator atcMediator = new ATCMediator();
        Flight sparrow101 = new Flight(atcMediator);
        Runway mainRunway = new Runway(atcMediator);
        atcMediator.registerFlight(sparrow101);
        atcMediator.registerRunway(mainRunway);
        sparrow101.getReady();
        mainRunway.land();
        sparrow101.land();
          
    }
}

Producción:

Ready for landing.
Landing permission granted.
Successfully Landed.

Ventaja

  • Limita la subclasificación. Un mediador localiza el comportamiento que, de otro modo, se distribuiría entre varios objetos. Cambiar este comportamiento requiere la subclasificación de Mediator solamente, las clases de Colega se pueden reutilizar tal cual.

Desventaja

  • Centraliza el control. El patrón del mediador cambia la complejidad de la interacción por la complejidad del mediador. Debido a que un mediador encapsula protocolos, puede volverse más complejo que cualquier colega individual. Esto puede convertir al propio mediador en un monolito difícil de mantener.

Este artículo es una contribución de Saket Kumar . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *