Рубрики
Без рубрики

Шаблон посредника

Определите объект, который инкапсулирует способ взаимодействия набора объектов. Посредник способствует слабому сцеплению путем… Помеченный шаблонами проектирования, java, шаблоном, поведенческим.

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

  • Посредник: определяет интерфейс для общения с коллегой объекты
  • Конкретный посредник: реализует совместное поведение, координируя объекты коллег. Знает и поддерживает своих коллег
  • Классы коллег: каждый класс коллег знает свой объект-посредник. Каждый коллега общается со своим посредником всякий раз, когда он в противном случае общался бы с другим коллегой
public class Main {

    public static void main(String[] args) {
        ConcreteMediator m = new ConcreteMediator();
        ConcreteColleague1 c1 = new ConcreteColleague1(m);
        ConcreteColleague2 c2 = new ConcreteColleague2(m);
        m.setColleague1(c1);
        m.setColleague2(c2);
        c1.send("From c1");
        c2.send("From c2");
    }
}

public interface Mediator {
    void send(String message, Colleague colleague);
}

public class ConcreteMediator implements Mediator {

    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;

    public void setColleague1(ConcreteColleague1 colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(ConcreteColleague2 colleague2) {
        this.colleague2 = colleague2;
    }

    @Override
    public void send(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.notify(message);
        } else {
            colleague1.notify(message);
        }
    }
}

public abstract class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
}

public class ConcreteColleague1 extends Colleague {

    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

    public void send(String message) {
        mediator.send(message, this);
    }

    public void notify(String message) {
        System.out.println("Colleague1 gets message: " + message);
    }
}

public class ConcreteColleague2 extends Colleague {

    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

    public void send(String message) {
        mediator.send(message, this);
    }

    public void notify(String message) {
        System.out.println("Colleague2 gets message: " + message);
    }
}
Colleague2 gets message: From c1
Colleague1 gets message: From c2

eidherjulian61/дизайн-шаблоны

Основные Шаблоны Проектирования

эйдер ・ 27 сентября ・ 1 минута чтения

Оригинал: “https://dev.to/eidher/mediator-pattern-2i81”