Tasarım Örüntüsü

Mediator

Behavioral Patterns bir örneği olan Mediator örüntü birçok bileşenin birbirinden servis kullandığı ve bu servis kullanımlarından dolayı bağımlılıkların çok arttığı durumlarda bu bağımlılıkları merkeze taşıyarak bağımlılık kaosunu çözen bir yaklaşımdır.

Onur Dayıbaşı
Design Patterns

--

Bilgi Notu: Diğer tüm Tasarım Örüntüleri yazıma bu linkten ulaşabilirsiniz.

Hangi Durumda

Mediator örüntü birçok bileşenin birbirinden servis kullandığı ve bu servis kullanımlarından dolayı bağımlılıkların çok arttığı durumlarda bu bağımlılıkları merkeze taşıyarak bağımlılık kaosunu çözen bir yaklaşımdır.

Mediator örüntüsü gerçek hayattan alınmış bir örüntüdür. Havadaki uçakların rotaları ve birbirleri ile konuşması yerine, yer istasyonları ile iletişim kurarak belli bir merkezlerden yönetilmeleri sağlanır.

Bunun sayesinde havadaki binlerce uçağın birbirleri ile konuşmaları sonucu oluşturacakları karmaşıklığın önüne geçilmiş olur. Problem merkezileştirilerek çözülür.

Örnek

Yazılımda da benzer durumlar ile zaman zaman karşılaşırız. Örneğin önceden çalıştığım bir projede benzer bir problem ile karşı karşıya gelmiştik. Arayüz uygulamamızın bir çok bileşeni ve bu bileşenlerin birbirleri ile konuşması gerekiyordu.

  • Menuler,
  • Toolbar
  • EH nesnelerini tutan modeller
  • Harita Katmanı
  • 2 Boyutlu Radar Scope’lar
  • 3D Visualization Ekranları
  • Model parametrelerinin gösterildiği ekranlar
  • vb.. bir sürü bileşen olduğunu düşünün.

Uygulamanın merkezine bir ScreenMediator nesnesi oluşturarak tüm nesnelerin birbirinden habersiz hayatlarına devam etmesini sağlamıştık. Bu bir yaklaşım da bileşenlerin oldukça sade ve basit geliştirilmesini sağlarken tüm iletişim ve koordinasyon yoğunluğu Merkezi nesnenin üzerine bindiğini görebiliriz. Merkezi nesne büyür, karmaşıklık artar. Diğer bir yöntem de Observer örüntüsü bunu daha sonraki yazılarımda anlatacağım.

Yapısı

Mediator Class Diagram

Örnek Kod

Code from https://refactoring.guru/design-patterns/mediator/csharp/example

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--