Mediator
Definition
Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
UML class diagram
Participants
- Mediator
- defines an interface for communicating with Colleague objects
- ConcreteMediator
- implements cooperative behavior by coordinating Colleague objects
- knows and maintains its colleagues
- Colleague classes
- each Colleague class knows its Mediator object
- each colleague communicates with its mediator whenever it would have otherwise communicated with another colleague
Sample code in Java
package com.hong.mediator; abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator){ this.mediator = mediator; } } class ConcreteColleagueA extends Colleague{ public ConcreteColleagueA(Mediator mediator) { super(mediator); } public void send(String message){ this.mediator.send(message, this); } public void display(String message){ System.out.println("ColleaugeA sending message: " + message); } } class ConcreteColleagueB extends Colleague{ public ConcreteColleagueB(Mediator mediator) { super(mediator); } public void send(String message){ this.mediator.send(message, this); } public void display(String message){ System.out.println("ColleaugeB sending message: " + message); } } interface Mediator { public void send(String message, Colleague colleague); } class ConcreteMediator implements Mediator { private ConcreteColleagueA colleagueA; private ConcreteColleagueB colleagueB; @Override public void send(String message, Colleague colleague) { if(colleague instanceof ConcreteColleagueA ) { colleagueA.display(message); } else { colleagueB.display(message); } } public ConcreteColleagueA getColleagueA() { return colleagueA; } public void setColleagueA(ConcreteColleagueA colleagueA) { this.colleagueA = colleagueA; } public Colleague getColleagueB() { return colleagueB; } public void setColleagueB(ConcreteColleagueB colleagueB) { this.colleagueB = colleagueB; } } public class Mediator_structure { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator); ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator); mediator.setColleagueA(colleagueA); mediator.setColleagueB(colleagueB); colleagueA.send("Hello"); colleagueB.send("World"); } }