Middle
Programlama bağlamında arabulucu nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Mediatör, diğer nesneler (meslektaşlar) arasındaki etkileşimi yönetmek için merkezi bir nesne öneren davranışsal bir tasarım desenidir. Nesneler doğrudan iletişim kurmak yerine, mediatör aracılığıyla etkileşime girerler.
Mediatör kullanımının avantajları:
- Bağlılığı azaltma: Nesneler birbirine doğrudan referanslara sahip değildir, bu da bağımlılığı azaltır.
- Yönetimi basitleştirme: Nesneler arasındaki etkileşimler tek bir yerde toplanır, bu da anlaşılmasını ve değiştirilmesini kolaylaştırır.
- Yeniden kullanılabilirliği artırma: Bireysel bileşenler, sistemin diğer bileşenleriyle çok bağlı olmadan başka bağlamlarda yeniden kullanılabilir.
Dezavantajlar:
- Mediatörün karmaşıklığının artması: Etkileşim sayısı arttıkça, mediatör karmaşık ve bakımı zor hale gelebilir.
- Performans düşüşü olasılığı: Tüm etkileşimler merkezi bir nesne üzerinden gerçekleşir, bu da ek maliyetler oluşturabilir.
Basit bir uygulama örneği:
// Mediator arayüzü
public interface IMediator
{
void SendMessage(string message, Colleague colleague);
}
// Meslektaşlar için temel sınıf
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);
}
// Somut mediatör
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);
}
}
}
// Somut meslektaşlar
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"Mesaj alındı Meslektaş 1: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"Mesaj gönderildi Meslektaş 1: {message}");
mediator.SendMessage(message, this);
}
}
public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(IMediator mediator) : base(mediator) { }
public override void ReceiveMessage(string message)
{
Console.WriteLine($"Mesaj alındı Meslektaş 2: {message}");
}
public override void Send(string message)
{
Console.WriteLine($"Mesaj gönderildi Meslektaş 2: {message}");
mediator.SendMessage(message, this);
}
}
// Kullanım örneği
// var mediator = new ConcreteMediator();
// var colleague1 = new ConcreteColleague1(mediator);
// var colleague2 = new ConcreteColleague2(mediator);
// mediator.Colleague1 = colleague1;
// mediator.Colleague2 = colleague2;
// colleague1.Send("Merhaba Meslektaş 2!");
// colleague2.Send("Merhaba Meslektaş 1!");
Genellikle, daha karmaşık mesajlaşma sistemleri oluşturmak için Observer gibi diğer desenlerle birlikte kullanılır. .NET bağlamında, MediatR gibi istek ve komutlar üzerinde çalışan kütüphanelerde yaygın olarak uygulanır.