Определите объект, который инкапсулирует способ взаимодействия набора объектов. Посредник способствует слабой связи, не позволяя объектам явно ссылаться друг на друга, и это позволяет вам независимо изменять их взаимодействие.
- Посредник: определяет интерфейс для общения с коллегой объекты
- Конкретный посредник: реализует совместное поведение, координируя объекты коллег. Знает и поддерживает своих коллег
- Классы коллег: каждый класс коллег знает свой объект-посредник. Каждый коллега общается со своим посредником всякий раз, когда он в противном случае общался бы с другим коллегой
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”