Middle
რა არის მედიანატორი პროგრამირების კონტექსტში?
sobes.tech AI
პასუხი AI-სგან
მედიატორი არის ქცევითი დიზაინის ნიმუში, რომელიც წინაშე აყენებს ცენტრალიზებულ ობიექტს ურთიერთქმედების მართვისთვის სხვა ობიექტებს (კოლეგებს). ნაცვლად იმისა, რომ ობიექტები პირდაპირ ურთიერთქმედებდნენ ერთმანეთს, ისინი ურთიერთქმედებენ მედიატორის მეშვეობით.
მედიატორის გამოყენების უპირატესობები:
- კავშირების შემცირება: ობიექტებს არ აქვთ პირდაპირი ბმულები ერთმანეთს, რაც ამცირებს მათ დამოკიდებულებას.
- მართვის გამარტივება: ურთიერთქმედებები ობიექტებს შორის ერთ ადგილას არის თავმოყრილი, რაც ამარტივებს მათ გაგებას და ცვლილებას.
- პერიოდული გამოყენების გაუმჯობესება: ცალკეული კომპონენტები შეიძლება გამოყენებულ იქნას სხვა კონტექსტებში, რადგან ისინი არ არიან ძალიან დაკავშირებული სისტემის სხვა კომპონენტებთან.
მცირეობები:
- მედიატორის სირთულის ზრდა: ურთიერთქმედებების რაოდენობის ზრდასთან ერთად, მედიატორი შეიძლება გახდეს რთული და რთულად შენარჩუნებადი.
- შესაძლო გამტარუნარიანობის შემცირება: ყველა ურთიერთქმედება გადის ცენტრალურ ობიექტზე, რაც შეიძლება გამოიწვიოს დამატებითი ხარჯები.
საუკეთესო მაგალითი მარტივი რეალიზაციის:
// მედიატორის ინტერფეისი
public interface IMediator
{
void SendMessage(string message, Colleague colleague);
}
// კოლეგის ბაზის კლასი
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);
}
// კონკრეტული მედიატორი
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);
}
}
}
// კონკრეტული კოლეგები
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"კოლეგა 1-ის მიღებული შეტყობინება: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"კოლეგა 1-ის გაგზავნილი შეტყობინება: {message}");
mediator.SendMessage(message, this);
}
}
public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"კოლეგა 2-ის მიღებული შეტყობინება: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"კოლეგა 2-ის გაგზავნილი შეტყობინება: {message}");
mediator.SendMessage(message, this);
}
}
// გამოყენების მაგალითი
// var mediator = new ConcreteMediator();
// var colleague1 = new ConcreteColleague1(mediator);
// var colleague2 = new ConcreteColleague2(mediator);
// mediator.Colleague1 = colleague1;
// mediator.Colleague2 = colleague2;
// colleague1.Send("გამარჯობა კოლეგა 2!");
// colleague2.Send("გამარჯობა კოლეგა 1!");
ხშირად გამოიყენება სხვა ნიმუშებთან ერთად, მაგალითად, Observer, უფრო რთული შეტყობინებების გაცვლის სისტემების რეალიზაციისთვის. .NET კონტექსტში ხშირად გამოიყენება მოთხოვნებისა და ბრძანებების სამუშაო ბიბლიოთეკებში, როგორიცაა MediatR.