certain-design-patterns/mediator.py

49 lines
1.9 KiB
Python

from abc import ABC, abstractmethod
class IMediator(ABC):
@abstractmethod
def register_user(self): pass
@abstractmethod
def send_message(self): pass
class Mediator:
"""Класс-посредник, который управляет взаимодействием между пользователями."""
def __init__(self): self._users = []
def register_user(self, user):
"""Регистрация пользователя в системе."""
self._users.append(user)
user.set_mediator(self)
def send_message(self, sender, message):
"""Отправка сообщения от одного пользователя всем остальным."""
for user in self._users:
if user != sender: user.receive_message(message)
class User:
"""Класс пользователя, который может отправлять и получать сообщения."""
def __init__(self, name):
self._name = name
self._mediator = None
def set_mediator(self, mediator):
"""Установка посредника для пользователя."""
self._mediator = mediator
def send_message(self, message):
"""Отправка сообщения через посредника."""
print(f"{self._name} отправляет сообщение: {message}")
self._mediator.send_message(self, message)
def receive_message(self, message):
"""Получение сообщения от другого пользователя."""
print(f"{self._name} получил сообщение: {message}")
mediator = Mediator()
user1, user2, user3 = User("Alice"), User("Bob"), User("Charlie")
mediator.register_user(user1)
mediator.register_user(user2)
mediator.register_user(user3)
user1.send_message("Привет всем!")