TASARIM ÖRÜNTÜLERİ
Bridge
Structural Patterns bir örneği olan Bridge farklı katmanlarda bulunan gerçekleştirimleri soyutlayarak birbirlerini iletişim kurabilecekleri bir köprü yapısı kurarak hiyerarşik karmaşıklığın önüne geçmeye çalışır.
Bilgi Notu: Diğer tüm Tasarım Örüntüleri yazıma bu linkten ulaşabilirsiniz.
Hangi Durumda
Sisteminizde 2 farklı yapı grubu var. Bu grupların farklı farklı gerçekleştirimleri bulunuyor. Bu yapıların birbirlerini gerçekleştirim seviyesi bilmesi yerine belli interface(arayüzler) üzerinden referanslarını tutarak kullanması, karmaşık hiyerarşik yapıların önüne geçecektir.
UI Bileşenleri ve İşletim Sistemleri
UI Bileşen Grubu(Düğme, TextField vb ) ve İşletim Sistemi Grubu (MacOS, Linux, Windows) bunların I/O mekanizmaları ve Rendering mekanizmalarında farklılıklar bulunur.
Eğer biz gerçekleştirim olarak Implementation seviyesinde bu nesneleri yazarsak WindowsTextField, MacOsTextField … gibi sayılarda sınıflar oluşturup bu logicleri bunların içerisinde gerçekleştirmemiz gerekecek.
Bu her bir bileşen ve işletim sistemi eklenmesi durumunda geometrik katlanarak artacaktır.
Uzaktan Kumandalar ve Akıllı Ev Cihazları
Uzaktan Kumandalar (Eski nesil 2 düğmeli, Çok düğmeli ve Touchpad vb kumanda çeşitleri olsun) Cihaz Grubu (TV, Radyo, Müzik Seti) olun.
Kumandalar bu cihazları kontrol etmek istediklerini düşünelim. Bu durumda En son Teknoloji TV ve en eski TV veya az özellikli Radyo vs için 1000 lerce kumanda üretilmesi gerekir.
Bu gerçekleştirim seviyesi karmaşadan kaçmak için kullanılacak sistemler kısmında yani cihazlar kısmında bir soyutlama yapılması
Thread ve İşletim Sistemi
Örnekte Bridge örüntüsünün avantajını daha net görebilirsiniz. Elimizde Thread türleri olsun 2 tip(Preemptive,TimeSliced) ve bu thread’lerin çalıştığı 2 tip( Unix, Windows ) ortamı olsun.
Şimdi yeni bir ortam eklemek istediğimizde örneğin JVM platformunu bu sisteme eklemek istediğimiz zaman mevcut sistemin 2x2 → 2x3 → 6 olacak ve bu mekanizmada sistem çarparak büyüyecek. (Geometrik Büyüme)
Bridge örüntüsünü kullanırsak ThreadScheduler_Implementation arayüzle ayırarak Thread Tiplerini ayrı bir hiyerarşide, Implementation ayrı hiyerarşide tutarak yeni platformlar ve yeni Thread tipleri eklemek daha basit bir hale getirebilirsiniz.
Yapısı
Servis olarak kullanılacak ConcreteImplementor bir arayüz ile soyutlanır. Bu Implementor Interface, bu servisi kullanıcı grubu sınırlandıracak Abstract bir sınıftan türetilir. Ve bundan türetilen sınıflardan yapılan çağrılar delegasyon yöntemi ile Implementor sınıfına yönlendirilir.
Kod Örneği
Yukarıdaki örneğe baktığımızda 2 farklı soyutlama katmanı bulunmaktadır. Uzaktan kumanda ve Televizyon.
- Logitech Uzaktan Kumanda → AbstractRemoveControl türüyor
- Televizyon → ITV türüyor
Elimizde 2 farklı yapı bulunmakta. TV’nin açılıp kapanma ve televizyon kanallarının seçiminin yer aldığı sınıflar. TV
AbstractRemoveControl ile TV üzerinde erişim sağlayarak Bridge kurarak gerçekleştirimleri çalıştırır.
Burda LogitechRemoteControl hangi TV ünitesini çalıştırdığını arkaplanda delegation yapılırken ITV hangi metodlarının çalıştığı ile ilgilenmez. Tek bilmesi gereken AbstractRemoteControl sınıfı ve buradan çağırabileceği metodlar.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.