Ce este
Șablonul Mediator mută comunicarea dintre multe obiecte într-un singur loc central. În loc ca fiecare să-i cunoască pe toți ceilalți (iar n obiecte să însemne n·n legături), fiecare obiect cunoaște doar mediatorul, iar mediatorul direcționează mesajele.
Exemplu: o cameră de chat
Utilizatorii nu păstrează niciodată referințe unii la alții. Un utilizator trimite mesajul camerei; camera îl livrează tuturor celorlalți. Intrarea și ieșirea modifică o singură listă, într-un singur loc.
Toți vorbesc prin cameră
ana cunoaște doar camera; camera îi cunoaște pe toți. Regulile de livrare — sărim peste expeditor, iar mai târziu poate adăugăm dezactivarea sunetului sau mesaje private — se află într-o singură metodă.
Ieșire: program Python complet
# Mediatorul: utilizatorii nu vorbesc niciodată direct unii cu alții.
class ChatRoom:
def __init__(self) -> None:
self.users: list["User"] = []
def join(self, user: "User") -> None:
user.room = self
self.users.append(user)
def broadcast(self, sender: "User", msg: str) -> None:
for user in self.users:
if user is not sender:
print(user.name, "primește de la", sender.name + ":", msg)
class User:
def __init__(self, name: str) -> None:
self.name = name
self.room: ChatRoom | None = None
def send(self, msg: str) -> None:
if self.room is not None:
self.room.broadcast(self, msg)
room = ChatRoom()
ana = User("ana")
ben = User("ben")
cleo = User("cleo")
room.join(ana)
room.join(ben)
room.join(cleo)
ana.send("salut tuturor")
Când să îl folosești
Folosește-l când multe obiecte se coordonează și rețeaua de „cine îi spune cui” devine prea deasă — sisteme de chat, câmpuri de formular care se activează și se dezactivează reciproc, coordonare în stilul controlului traficului aerian.
Renunță la el 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 pot fi citite într-un singur loc; adăugarea unui participant nu modifică 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ță.