Ce este
Șablonul Mediator mută comunicarea dintre multe obiecte într-un singur loc central. În loc ca fiecare să știe despre toți ceilalți (și n obiecte să însemne n·n legături), fiecare obiect cunoaște doar mediatorul, iar mediatorul dirijează mesajele.
Exemplu: o cameră de chat
Utilizatorii nu păstrează niciodată referințe unii către alții. Un utilizator trimite mesajul către cameră; camera îl livrează tuturor celorlalți. Intrarea și ieșirea modifică un singur tablou, într-un singur loc.
Toți vorbesc prin cameră
Ana cunoaște doar camera; camera îi cunoaște pe toți. Un singur apel send afișează două linii — ben și cleo primesc mesajul, iar ana nu își primește propriul mesaj înapoi. Regulile de livrare — sari peste expeditor, mai târziu poate mesaje mute sau private — există într-o singură metodă.
Ieșire: program TypeScript și rezultatul capturat
// Mediatorul: utilizatorii nu vorbesc niciodată direct unii cu alții.
class ChatRoom {
private users: User[] = []
join(user: User): void {
user.room = this
this.users.push(user)
}
broadcast(from: User, message: string): void {
for (const user of this.users) {
if (user !== from) {
console.log(user.name, "primește de la", from.name + ":", message)
}
}
}
}
class User {
readonly name: string
room: ChatRoom | undefined
constructor(name: string) {
this.name = name
}
send(message: string): void {
this.room?.broadcast(this, message)
}
}
const room = new ChatRoom()
const ana = new User("ana")
const ben = new User("ben")
const cleo = new User("cleo")
room.join(ana)
room.join(ben)
room.join(cleo)
ana.send("salut tuturor")
Când să îl folosești
Folosește-l atunci când multe obiecte se coordonează și rețeaua de cine-îi-spune-cui devine deasă — sisteme de chat, câmpuri de formular care se activează și se dezactivează reciproc, coordonare în stil trafic aerian.
Evită-l pentru două sau trei obiecte cu legături simple. Un mediator între două părți este un intermediar pe care nu l-a angajat nimeni.
Avantaje și dezavantaje
Avantaje: participanții rămân simpli și reutilizabili; regulile de coordonare se citesc într-un singur loc; adăugarea unui participant nu afectează nimic altceva.
Dezavantaje: mediatorul crește — poate deveni pe nesimțite clasa uriașă care știe totul; tot traficul printr-un singur punct poate ascunde costuri de performanță.