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.

Onur Dayıbaşı
Design Patterns

--

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.

image from https://refactoring.guru/design-patterns/bridge

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ı

image from https://refactoring.guru/design-patterns/bridge

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.

Bridge Class Diagram

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.

--

--