Middle
Mis on vahendaja programmeerimise kontekstis?
sobes.tech AI
Vastus AI-lt
Vahetaja on käitumise disainimuster, mis pakub tsentraliseeritud objekti, mis haldab suhtlust teiste objektide (kaaslaste) vahel. Selle asemel, et objektid suhtleksid otse, suhtlevad nad vahetaja kaudu.
Vahetaja kasutamise eelised:
- Vähendatud sidusus: Objektidel ei ole otseseid viiteid üksteisele, mis vähendab nende sõltuvust.
- Hallatava lihtsustamine: Objektide vahelised suhted on koondatud ühte kohta, mis lihtsustab nende mõistmist ja muutmist.
- Taaskasutamise parandamine: Eraldatud komponendid võivad olla kasutatavad teistes kontekstides, kuna nad ei ole tihedalt seotud teiste süsteemi komponentidega.
Puudused:
- Vahetaja keerukuse kasv: Suureneva suhtluste arvu korral võib vahetaja muutuda keeruliseks ja hooldatavaks.
- Võimalik jõudluse langus: Kõik suhtlused toimuvad keskse objekti kaudu, mis võib tekitada lisakulusid.
Näide lihtsast rakendusest:
// Vahetaja liides
public interface IMediator
{
void SendMessage(string message, Colleague colleague);
}
// Kaaslaste baasklass
public abstract class Colleague
{
protected IMediator mediator;
public Colleague(IMediator mediator)
{
this.mediator = mediator;
}
public abstract void ReceiveMessage(string message);
public abstract void Send(string message);
}
// Konkreetne vahetaja
public class ConcreteMediator : IMediator
{
private ConcreteColleague1 colleague1;
private ConcreteColleague2 colleague2;
public ConcreteColleague1 Colleague1
{
set { colleague1 = value; }
}
public ConcreteColleague2 Colleague2
{
set { colleague2 = value; }
}
public void SendMessage(string message, Colleague colleague)
{
if (colleague == colleague1)
{
colleague2.ReceiveMessage(message);
}
else
{
colleague1.ReceiveMessage(message);
}
}
}
// Konkreetne kaaslane
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"Kaaslane 1 sai sõnumi: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"Kaaslane 1 saatis sõnumi: {message}");
mediator.SendMessage(message, this);
}
}
public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"Kaaslane 2 sai sõnumi: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"Kaaslane 2 saatis sõnumi: {message}");
mediator.SendMessage(message, this);
}
}
// Kasutamise näide
// var mediator = new ConcreteMediator();
// var colleague1 = new ConcreteColleague1(mediator);
// var colleague2 = new ConcreteColleague2(mediator);
// mediator.Colleague1 = colleague1;
// mediator.Colleague2 = colleague2;
// colleague1.Send("Tere, kaaslane 2!");
// colleague2.Send("Tere, kaaslane 1!");