14 Kasım 2022 Pazartesi

Bridge Pattern

- Soyutlama ile gerçekleştirmesini birbirinden ayırmak.
- Bridge Pattern soyutlamayı (abstraction) uygulamadan (implementation) ayırarak ikisinin birbirinden bağımsız çalışmasını sağlar. 
- Ana fikir Bileşimi, kalıtıma tercih et

Problem

- Normalde bir absraction ve implementasyonunu ayırmak için kalıtımı kullanırız.
- Absraction clasını farklı şekillerde implemente eden birden çok alt sınıfımız olabilir.(imp1,imp2 vs.)
- Fakat kalıtım ile Base Class ve Sub Class sıkı bir şekilde birbirine bağlanmış olur.
- Base Clası değiştirdiğimizde Sub Class da değişmek zorunda kalabilir.
- Ayrıca kalıtım ile compile-time da bir absraction ile implementasyonu birbirine bağlanmış olur ve implementasyonun run-time da değiştirilmesi imkansız hale gelmiş olur.
- Çünkü kalıtım değiştirilemez. Bir sınıftan run-time da başka bir sınıfı implemente etmesini isteyemeyiz.
- Sonuç olarak kalıtım kullandığımızda 
  • Abstraction ve implementasyon birbirine sıkı bir şekilde bağlanmış olur.
  • Run-time da implementasyonu değiştiremeyiz.

Ana Fikir: 
Soyutlamalar ile onların implementasyonları arasındaki ilişki her zaman is-a olarak yapılmak zorunda değildir.Bu ilişki bazen has-a ile de gösterilebilir ve bu durumda yüksek bağımlılığın getirdiği negatif etkiler aşılabilir.

Çözüm
Bridge kalıbı, soyutlamalar ile onların gerçekleştirmeleri arasında tabi durumda var olan is-a ilişkisini, has-a ilişkisine çevirir.
Bu durumda soyutlamalar ve gerçekleştirmeleri ayrı hiyerarşilerde tutulur.
Aralarında has-a ilişkisi olur.
Bu şekilde iki taraf arasındaki bağımlılığın azalması hedeflenir.




















Run-time da bir implementasyonun seçilebilmesi için compile-time da absraction ve implementasyonun bağlanmasından kaçınılmalıdır.

Bir abstraction ve implementasyon arasındaki kalıcı bindingden kaçınmak istediğimiz de Bridge Patterni kullanabiliriz.


Hiç yorum yok:

Yorum Gönder