Junior — Middle
Puteți oferi un exemplu de aplicare a pattern-ului Mediator în proiectarea sistemelor software?
sobes.tech AI
Răspuns de la AI
Паттерн «Медиатор» используется для упрощения взаимодействия между объектами, уменьшая количество прямых связей между ними. Вместо того чтобы объекты напрямую общались друг с другом, они взаимодействуют через медиатор, который централизует логику общения.
Пример применения в C# — чат, где несколько пользователей (коллеги) общаются через централизованный объект Медиатор:
// Интерфейс медиатора
public interface IChatMediator
{
void SendMessage(string message, User user);
void RegisterUser(User user);
}
// Конкретный медиатор
public class ChatMediator : IChatMediator
{
private List<User> users = new List<User>();
public void RegisterUser(User user)
{
users.Add(user);
}
public void SendMessage(string message, User sender)
{
foreach (var user in users)
{
if (user != sender)
user.Receive(message);
}
}
}
// Коллега
public abstract class User
{
protected IChatMediator mediator;
protected string name;
public User(IChatMediator mediator, string name)
{
this.mediator = mediator;
this.name = name;
}
public abstract void Send(string message);
public abstract void Receive(string message);
}
public class ChatUser : User
{
public ChatUser(IChatMediator mediator, string name) : base(mediator, name) { }
public override void Send(string message)
{
Console.WriteLine($"{name} отправляет сообщение: {message}");
mediator.SendMessage(message, this);
}
public override void Receive(string message)
{
Console.WriteLine($"{name} получил сообщение: {message}");
}
}
// Использование
var mediator = new ChatMediator();
var user1 = new ChatUser(mediator, "Алиса");
var user2 = new ChatUser(mediator, "Боб");
mediator.RegisterUser(user1);
mediator.RegisterUser(user2);
user1.Send("Привет, Боб!");
Такой подход упрощает поддержку и расширение системы, так как все взаимодействия проходят через медиатор, а не напрямую между объектами.