Dekoratör Tasarım Kalıbı
Merhaba arkadaşlar;
Bugün sizlerle Dekoratör Tasarım Kalıbından (Decorator Design Pattern) bahsetmek istiyorum.
Senaryo : Bir elektronik dağıtım firması (Örneğin BestBuy), E-kitap işine girmek istiyor. Piyasada çeşitli çeşitli E-kitap ürünleri var. Örneğin benimde kullandığım Amazon firmasının ürünü Kindle.
Bu elektronik dağıtım firması, Amazon firmasından aldığı ürünleri satmak üzere bir uygulama geliştirmek istiyor.
Amaç : Kindle türleri ve türlere ait farklı fiyat aralıklarında bulunan ürünleri, sonradan eklenen yeni ürünlere ve özelliklere göre proje yapısını bozmadan genişletebilir yapmak.
İlkel Çözüm : Örneğin elimizde şu Kindle ürün ve özellikleri olsun ;
- KindleTouch (Özelliksiz)
- KindleTouchWithAds (Reklamlı)
- KindleTouchWithWifi (Kablosuz)
BestBuy şirketinden bir yazılım geliştirici yukarıdaki modeli diğer yazılım geliştiricilere sunuyor. Arkadaşlarından birisi ona şu soruyu yöneltiyor.
Soru : Peki, Amazon firması Reklamlı ve Kablosuz özelliklerini ihtiva eden yeni bir ürün çıkartırsa ne olacak??
Yanıt : Eee KindleTouchWithAdsAndWifi diye bir implementasyon daha oluştururuz.
Soru : Peki o zaman, KindleTouchWithAds ve KindleTouchWithWifi sınıfları içinde gerekli yordamlarımız varken neden yeni bir implementasyon oluşturalım ki??
Yanıt : Eee o zaman, iki sınıftan birden miras alalım!!
Soru : E Java çoklu kalıtıma izin vermiyor ki!!
Yanıt : Peki o zaman ne yapmalı??
Tasarım kalıplarıyla içli dışlı bir yazılım geliştirici cevap veriyor; Ben Decorator Tasarım Kalıbı diye birşey duymuştum. Sanırım onun ile bu işi halledebiliriz.
Doğru Çözüm :
Dekoratör Tasarım Kalıbı sorunumuz için tam biçilmiş kaftan. İstendiği takdirde yeni bir ürün ve özellik proje yapımıza eklenebiliyor. Ayrıca farklı özellikler Decorator soyut sınıf üzerinden geliştirilebiliyor. İlkel çözümde genişleme yalnızca kalıtım mekanizmasıyla çözülmeye çalışılırken, doğru çözümümüzde kompozisyon yöntemiyle Ebook nesnelerimizi mevcut özelliğimizle sarmalayarak gerçekleştiriyoruz. Daha iyi anlaşılması bakımıdan lütfen kaynak kodları inceleyiniz.
Tekrar görüşmek dileğiyle..