Вы не указали язык, поэтому я буду сохранять его как можно более общим.
abstract class Participant {
public string Notify(string message);
}
class WidgetOne extends Participant {
Mediator _mediator;
public WidgetOne(Mediator theMediator){
_mediator = theMediator;
}
public string Notify(string message){
#do whatever
}
public string Talk(string message){
return _mediator.Talk(message, this);
}
}
class WidgetTwo extends Participant {
Mediator _mediator;
public WidgetOne(Mediator theMediator){
_mediator = theMediator;
}
public string Notify(string message){
#do whatever
}
public string Talk(string message){
return _mediator.Talk(message, this);
}
}
class Mediator {
WidgetOne _widgetOne;
WidgetTwo _widgetTwo;
public void setWidgetOne(WidgetOne theWidget){
_wiidgetOne = theWidget;
}
public void setWidgetTwo(WidgetTwo theWidget){
_wiidgetTwo = theWidget;
}
public string Talk(string message, Participant p){
#make sure you do the correct ==/equals/etc.
if(p == _widgetOne){
response = _widgetTwo.Notify(message);
}else if (p == _widgetTwo){
response = _widgetOne.Notify(message);
}
return response;
}
}
class Main {
public void run(){
Mediator theMediator = new Mediator();
WidgetOne one = new WidgetOne(theMediator);
WidgetTwo two = new WidgetTwo(theMediator);
theMediator.setWidgetOne(one);
theMediator.setWidgetTwo(two);
one.Talk("hi there");
}
}
Итак, на высоком уровне у вас есть 2 участника, которые хотят общаться, поэтому вам нужно настроить общий интерфейс для этого.
Создаем вызов метода Notify (message); это в основном ваш канал связи.
Чтобы все настроить, мы создаем экземпляр посредника, а затем создаем экземпляр обоих участников, передавая им посредника.
Последний шаг установки, это ввести / установить участников медиаторов. В нашем случае мы просто используем простые сеттеры.
Когда приходит время общаться, каждый участник просто вызывает посредника, передает сообщение и self в качестве параметра.
Посредник видит, кто связался с ними, а затем вызывает противоположное.
Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, очевидно, существует множество вариаций этого паттерна, поэтому дайте мне знать, если есть что-то еще, что вы хотели бы увидеть.
Берегите себя.