vous ne spécifiez pas une langue si je vais le garder aussi générique que possible.
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");
}
}
donc à un haut niveau, vous avez 2 participants e à vouloir parler, vous devez configurer une interface commune pour le faire.
Nous créons un appel de méthode Notify (message); C'est essentiellement votre canal de communication. Pour régler les choses, nous instancions un médiateur, puis instancions les deux participants en leur passant le médiateur. La dernière étape, insetup, consiste à injecter/définir les participants médiateurs. Dans notre cas, nous utilisons simplement des setters simples. Au moment de communiquer, chaque participant appelle simplement le médiateur, transmet le message et le soi en tant que paramètre.
Médiateur voir qui les a contactés, puis appelle le contraire.
S'il vous plaît laissez-moi savoir si vous avez des questions, il y a évidemment de nombreuses variations de ce modèle, alors laissez-moi savoir s'il y a quelque chose que vous aimeriez voir.
Faites attention.
Oui, j'aime ça. J'ai été surpris de ne pas voir la création de cela comme un problème dans l'un des sites évidents que j'ai googlé, même si je suis assez sûr que le GoF l'a couvert. Pourriez-vous laisser tomber quelques-unes des autres circonstances qui vous viennent à l'esprit? À votre santé – Berryl