Patrón de diseño de mediador – Part 1

El patrón de diseño del mediador define un objeto que encapsula cómo interactúa un conjunto de objetos. 
El mediador es un patrón de comportamiento (como el patrón observador o visitante ) porque puede cambiar el comportamiento de ejecución del programa. 
Estamos acostumbrados a ver programas que se componen de un gran número de clases. Sin embargo, a medida que se agregan más clases a un programa, el problema de la comunicación entre estas clases puede volverse más complejo. 
Por ello, el mantenimiento se convierte en un gran problema que debemos solucionar de una forma u otra. 
Como en muchos otros patrones de diseño , el patrón mediador viene a resolver el problema. Hace que la comunicación entre objetos se encapsule con un objeto mediador. 
Los objetos no se comunican directamente entre sí, sino que se comunican a través del mediador. 
 

Implementación de patrón de mediador en Java

Este programa ilustra una subasta. El Mediador de la Subasta es responsable de agregar a los compradores, y después de que cada comprador puje una cierta cantidad por el artículo, el mediador sabe quién ganó la subasta. 
Diagrama de clase: 
 

Mediator design pattern

Java

// Java code to illustrate Mediator Pattern
// All public class codes should be put in
// different files.
 
public interface Mediator {
 
    // The mediator interface
    public void addBuyer(Buyer buyer);
    public void findHighestBidder();
}
 
public class AuctionMediator implements Mediator {
 
    // this class implements the interface and holds
    // all the buyers in a Array list.
    // We can add buyers and find the highest bidder
    private ArrayList buyers;
 
    public AuctionMediator()
    {
        buyers = new ArrayList<>();
    }
 
    @Override
    public void addBuyer(Buyer buyer)
    {
        buyers.add(buyer);
        System.out.println(buyer.name + " was added to" +
                "the buyers list.");
    }
 
    @Override
    public void findHighestBidder()
    {
        int maxBid = 0;
        Buyer winner = null;
        for (Buyer b : buyers) {
            if (b.price > maxBid) {
                maxBid = b.price;
                winner = b;
            }
        }
        System.out.println("The auction winner is " + winner.name +
        ". He paid " + winner.price + "$ for the item.");
    }
}
 
public abstract class Buyer {
     
    // this class holds the buyer
    protected Mediator mediator;
    protected String name;
    protected int price;
 
    public Buyer(Mediator med, String name)
    {
        this.mediator = med;
        this.name = name;
    }
 
    public abstract void bid(int price);
 
    public abstract void cancelTheBid();
}
 
public class AuctionBuyer extends Buyer {
 
    // implementation of the bidding process
    // There is an option to bid and an option to
    // cancel the bidding
    public AuctionBuyer(Mediator mediator,
                                String name)
    {
        super(mediator, name);
    }
 
    @Override
    public void bid(int price)
    {
        this.price = price;
    }
 
    @Override
    public void cancelTheBid()
    {
        this.price = -1;
    }
}
 
public class Main {
 
    /* This program illustrate an auction. The AuctionMediator
    is responsible for adding the buyers, and after each
    buyer bid a certain amount for the item, the mediator
    know who won the auction. */
    public static void main(String[] args)
    {
 
        AuctionMediator med = new AuctionMediator();
        Buyer b1 = new AuctionBuyer(med, "Tal Baum");
        Buyer b2 = new AuctionBuyer(med, "Elad Shamailov");
        Buyer b3 = new AuctionBuyer(med, "John Smith");
 
        // Create and add buyers
        med.addBuyer(b1);
        med.addBuyer(b2);
        med.addBuyer(b3);
 
        System.out.println("Welcome to the auction. Tonight " +
                        "we are selling a vacation to Vegas." +
                        " please Bid your offers.");
        System.out.println("--------------------------------" +
                                        "---------------");
        System.out.println("Waiting for the buyer's offers...");
 
        // Making bids
        b1.bid(1800);
        b2.bid(2000);
        b3.bid(780);
        System.out.println("---------------------------------" +
                                            "--------------");
        med.findHighestBidder();
 
        b2.cancelTheBid();
        System.out.print(b2.name + " Has canceled his bid!, " +
                                            "in that case ");
        med.findHighestBidder();
    }
}

Producción: 

Tal Baum was added to the buyers list.
Elad Shamailov was added to the buyers list.
John Smith was added to the buyers list.
Welcome to the auction. Tonight we are
 selling a vacation to Vegas. please Bid your offers.
-----------------------------------------------
Waiting for the buyer's offers...
-----------------------------------------------
The auction winner is Elad Shamailov.
He paid 2000$ for the item.
Elad Shamailov Has canceled his bid!, In that 
case The auction winner is Tal Baum.
He paid 1800$ for the item.

ventajas

  • Sencillez
  • Puede reemplazar un objeto en la estructura con otro diferente sin afectar las clases y las interfaces.

Desventajas

  • El Mediador a menudo necesita tener mucha intimidad con todas las diferentes clases, y eso lo hace realmente complejo.
  • Puede dificultar su mantenimiento.

Autor: http://designpattern.co.il/
 

Publicación traducida automáticamente

Artículo escrito por DesignPattern 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 *