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!");