Middle
Dasturlash kontekstida mediator nima?
sobes.tech AI
AIdan javob
Mediator — bu xulosa qilish uchun markazlashtirilgan ob'ektni taklif qiladigan xulq-atvor dizayni naqshidir, u boshqa ob'ektlar (hamkasblar) o'rtasidagi o'zaro ta'sirni boshqaradi. Ob'ektlar to'g'ridan-to'g'ri muloqot qilish o'rniga, ular mediator orqali o'zaro ta'sir qiladilar.
Mediatorni ishlatishning afzalliklari:
- Bog'liqlikni kamaytirish: Ob'ektlar bir-biriga to'g'ridan-to'g'ri murojaat qilmaydi, bu ularning bog'liqligini kamaytiradi.
- Boshqarishni soddalashtirish: Ob'ektlar o'rtasidagi o'zaro ta'sirlar bitta joyda jamlangan, bu ularni tushunishni va o'zgartirishni osonlashtiradi.
- Qayta ishlatishni yaxshilash: Boshqa kontekstlarda foydalanish uchun alohida komponentlar, chunki ular tizimning boshqa komponentlariga juda bog'liq emas.
Kamchiliklar:
- Mediatorning murakkabligini oshirish: O'zaro ta'sirlar soni ortib borishi bilan, mediator murakkab va qo'llab-quvvatlash uchun qiyin bo'lishi mumkin.
- Ishlash qobiliyatining pasayishi ehtimoli: Barcha o'zaro ta'sirlar markaziy ob'ekt orqali o'tadi, bu qo'shimcha xarajatlar keltirib chiqarishi mumkin.
Oddiy amalga oshirish misoli:
// Mediator uchun interfeys
public interface IMediator
{
void SendMessage(string message, Colleague colleague);
}
// Hamkasblar uchun asosiy sinf
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);
}
// Aniq mediator
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);
}
}
}
// Aniq hamkasblar
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"Hamkasb 1 tomonidan qabul qilingan xabar: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"Hamkasb 1 tomonidan yuborilgan xabar: {message}");
mediator.SendMessage(message, this);
}
}
public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"Hamkasb 2 tomonidan qabul qilingan xabar: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"Hamkasb 2 tomonidan yuborilgan xabar: {message}");
mediator.SendMessage(message, this);
}
}
// Foydalanish misoli
// var mediator = new ConcreteMediator();
// var colleague1 = new ConcreteColleague1(mediator);
// var colleague2 = new ConcreteColleague2(mediator);
// mediator.Colleague1 = colleague1;
// mediator.Colleague2 = colleague2;
// colleague1.Send("Salom, hamkasb 2!");
// colleague2.Send("Salom, hamkasb 1!");
Ko'pincha, yanada murakkab xabar almashish tizimlarini amalga oshirish uchun Observer kabi boshqa naqshlar bilan birga ishlatiladi. .NET kontekstida, u so'rovlar va buyruqlar bilan ishlash uchun kutubxonalar, masalan, MediatR, da keng qo'llaniladi.