Инструменты пользователя

Инструменты сайта


pattern_mediator

Назад

Паттерн Посредник обеспечивает слабую связанность системы, избавляя объекты от необходимости явно ссылаться друг на друга и позволяя тем самым независимо изменять взаимодействия между ними.

Преимущества:

  • Упрощается сопровождение системы за счет централизации управляющей логики;
  • Объекты отделяются друг от друга;
  • Расширяются возможности повторного использования кода объектов, находящихся под управлением посредника;
  • Упрощает протоколы взаимодействия объектов.

Mediator
public class Mediator
{
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;
 
    public void setColleague1(ConcreteColleague1 colleague)
    {
        this.colleague1 = colleague;
    }
 
    public void setColleague2(ConcreteColleague2 colleague)
    {
        this.colleague2 = colleague;
    }
 
    public void Send(String message, Colleague colleague)
    {
        if (colleague == colleague1)
        {
            colleague2.notify(message);
        } else
        {
            colleague1.notify(message);
        }
    }
}
Colleague
public abstract class Colleague
{
    protected Mediator mediator;
 
    public Colleague(Mediator mediator)
    {
        this.mediator = mediator;
    }
 
    public void send(String message)
    {
        mediator.Send(message, this);
    }
 
    public abstract void notify(String message);
 
}
 
class ConcreteColleague1 extends Colleague 
{
    public ConcreteColleague1(Mediator mediator) 
    {
        super(mediator);
    }
 
    public void notify(String message) 
    {
        System.out.println("Colleague1 gets message: " + message);
    }
}
 
 
class ConcreteColleague2 extends Colleague 
{
    public ConcreteColleague2(Mediator mediator) 
    {
        super(mediator);
    }
 
    public void notify(String message) 
    {
        System.out.println("Colleague2 gets message: " + message);
    }
}
Main
public class Main
{
    public static void main(String[] args)
    {
        Mediator m = new Mediator();
 
        ConcreteColleague1 c1 = new ConcreteColleague1(m);
        ConcreteColleague2 c2 = new ConcreteColleague2(m);
 
        m.setColleague1(c1);
        m.setColleague2(c2);
 
        c1.send("Как поживаешь?");
        c2.send("Хорошо, спасибо");
    }
}
Результат
Colleague2 gets message: Как поживаешь?
Colleague1 gets message: Хорошо, спасибо