Programlamada Tasarım Desenleri #19 — Mediator Design Pattern (dotnet c#)
Programlamada Tasarım Desenleri #19 — Mediator Design Pattern (C# .NET ile Uygulama)
Merhaba yazılım dünyasının tutkulu gezginleri! Bu yazımızda, tasarım desenleri serimizin 19. halkasına geldik: Mediator Design Pattern, yani Ortak (Arabulucu) Tasarım Deseni.
Mediator Pattern, özellikle kompleks objeler arasındaki iletişimi düzenlemek ve bağımlılıkları azaltmak için tasarlanmış oldukça değerli bir desendir. Bu yazıda size C# ve .NET dilinde Mediator Design Pattern nedir, nasıl uygulanır, ne zaman ve neden tercih edilmelidir gibi başlıklarda kapsamlı bilgiler sunacağız. Ayrıca örnek kodlar, diyagramlar ve SEO uyumlu anahtar kelimelerle yazımızı süsleyeceğiz.
🔎 Mediator Design Pattern Nedir?
Mediator Design Pattern, aynı sistemde yer alan nesneler arasındaki doğrudan iletişimi önlemek amacıyla araya bir mediatör nesnesi yerleştiren davranışsal (behavioral) bir tasarım desenidir.
Bu desen sayesinde, nesneler birbirleri hakkında doğrudan bilgi sahibi olmak zorunda kalmazlar. Tüm iletişim, bir merkezi nesne (mediatör) üzerinden gerçekleştirilir. Böylece kod daha modüler, okunabilir ve sürdürülebilir hale gelir.

🎯 Ne Zaman Kullanmalıyız?
- Komponentler arasında sık iletişim varsa,
- Obje sayısı arttıkça sistem karmaşıklığı artıyorsa,
- Objeler arasındaki bağlantıları minimize etmek istiyorsak.
🧠 Anahtar Kavramlar
| Terim | Açıklama |
|---|---|
| Mediator | Ortamı koordine eden / yöneten arayüzdür. |
| ConcreteMediator | İletişimi gerçekleştiren sınıftır. |
| Colleague | Mediatör aracılığıyla iletişim kuran bileşen sınıflarıdır. |
🚀 C# ile Mediator Design Pattern Uygulaması
Aşağıda basit bir chat uygulaması örneği ile bu tasarım desenini uygulayacağız.
1. IMediator Arayüzü (Interface)
public interface IChatRoomMediator
{
void ShowMessage(User user, string message);
}
2. Concrete Mediator (ChatRoom)
public class ChatRoom : IChatRoomMediator
{
public void ShowMessage(User user, string message)
{
Console.WriteLine($"{DateTime.Now} [{user.Name}]: {message}");
}
}
3. Colleague (Kullanıcı Sınıfı)
public class User
{
private readonly IChatRoomMediator _mediator;
public string Name { get; set; }
public User(string name, IChatRoomMediator mediator)
{
Name = name;
_mediator = mediator;
}
public void Send(string message)
{
_mediator.ShowMessage(this, message);
}
}
4. Kullanım Örneği (Program.cs)
class Program
{
static void Main()
{
IChatRoomMediator chatRoom = new ChatRoom();
User user1 = new User("Ahmet", chatRoom);
User user2 = new User("Ayşe", chatRoom);
user1.Send("Merhaba Ayşe!");
user2.Send("Selam Ahmet, nasılsın?");
}
}
📌 Çıktı:
14.04.2024 10:45:31 [Ahmet]: Merhaba Ayşe!
14.04.2024 10:45:34 [Ayşe]: Selam Ahmet, nasılsın?
📊 UML Diyagramı
![]()
UML sınıf diyagramı, yapının nasıl şekillendiğini gözler önüne seriyor.
✅ Mediator Pattern’ın Avantajları
- ❎ Nesneler arası sıkı bağlantılar ortadan kalkar.
- 🔄 Sistemin bakımı ve test edilmesi kolaylaşır.
- 🧩 Uygulama modüler hale gelir.
- 🔁 İletişim kuralları tek bir yerde yönetilir.
❌ Dezavantajları
- 📌 Tüm iletişim tek bir sınıfta toplanır, bu sınıf karmaşıklaşabilir.
- 🧠 Bazı durumlarda aşırı soyutlama kodun anlaşılmasını zorlaştırabilir.
📚 Mediator Pattern vs Observer Pattern
Bu iki davranışsal desen bazen birbirine karıştırılabilir. O yüzden ufak bir karşılaştırma faydalı olacaktır:
| Özellik | Mediator | Observer |
|---|---|---|
| İletişim Şekli | Merkezi bir yönlendirici (Mediator) üzerinden | Dağıtık, olay tabanlı |
| Bağımlılık | Komponentler Mediatöre bağlı | Gözlemci & Gözlemlenen’e bağlı |
| Kullanım Alanı | GUI elementleri, Form yönetimi | Event Handling, Data Binding |
📦 .NET Dünyasında MediatR Kütüphanesi
.NET ekosisteminde Mediator Pattern’ın popüler bir uygulaması olan MediatR kütüphanesinden de bahsetmeden geçmeyelim. Özellikle CQRS (Command Query Responsibility Segregation) mimarisinde yaygın olarak kullanılır.
Install via NuGet:
dotnet add package MediatR
Daha fazla bilgi için → MediatR GitHub
🔚 Sonuç
Mediator Design Pattern, özellikle genişleyebilir ve modüler sistemler geliştirirken çok işinize yarayacak bir tasarım desenidir. Bağımlılıkları azaltarak bakımı kolaylaştırır ve daha sade iletişim yolları sunar.
Yukarıdaki C# örneği ile bu deseni projelerinizde rahatlıkla deneyebilirsiniz. Tasarım desenleriyle ilgili bu seride amacımız, karmaşıklığı azaltmak ve yazılım geliştirme süreçlerinizi daha profesyonel hale getirmektir.
🟢 Devamını Kaçırmayın!
Bir sonraki yazımızda Observer Pattern’ı detaylı olarak ele alacağız. Sitemizi yer imlerinize kaydedin, bildirimleri açın ve bizi sosyal medyada takip edin!
Eğer yazımızı bilgilendirici bulduysanız, yorum yaparak destek olabilirsiniz. 💬
Sormak istediklerinizi aşağıya yazın, birlikte inceleyelim! 👇
#csharp #dotnet #tasarimdesenleri #mediator #softwarearchitecture #programlama
📌 Bonus: Mediator Pattern ile ilgili Sık Sorulan Sorular (FAQ)
1. Mediator Pattern hangi tasarım desenleriyle birlikte kullanılır?
Sıklıkla Command, Observer ve Facade desenleriyle birlikte kullanılır.
2. Gerçek hayatta örneği nedir?
Bir havaalanındaki kontrol kulesi tüm uçaklar arası iletişimi mediatör olarak sağlar.
3. Multi-threaded uygulamalarda performansa etkisi olur mu?
Mediatör sınıfı doğru yönetilirse, thread-safe yapılarla performans problemi yaşanmaz.
🎯 Yazılımda fark yaratmak için: Tasarımı düşün, deseni uygula!
Teşekkürler! 🚀