Back to questions
Junior — Middle
64
Можете привести пример применения паттерна Медиаатор в проектировании программных систем?
Answer from AI
sobes.tech 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("Привет, Боб!");
Такой подход упрощает поддержку и расширение системы, так как все взаимодействия проходят через медиатор, а не напрямую между объектами.