25 Aralık 2012 Salı

Design Patterns - Decorator Pattern

Merhaba arkadaşlar,

Sizlerle beraber yaptığımız tasarım desenleri derslerimizin bugünkü konusu en çok bayanların hoşuna gideceğini düşünüyorum :). Bugün dekorasyon tasarım desenini anlatmaya çalışacağız.

Dekorasyon konumuza girmeden önce en son yazdığımız yazının kısa bir özetini geçelim. En son yazımızda singleton tasarım deseninden bahsetmiştik. Singleton tasarım deseni ile şunları yapmayı hedefliyoruz:
  • Bir uygulamanın yaşamı boyunca kullandığı bir sınıfın örneğinin tekil olunmasının istenmesi
  • İstenilen bu örneğin uygulamanın her noktasından erişiminin sağlanması
Singleton tasarım deseni en basit tasarım deseni olarak gözükmesinin nedeni az kod yazılması ve konunun anlaşılırlığının basit olmasından kaynaklanıyor.

Konumuza gelicek olursak dekorasyon kelimesi dilimize fransızcadan geçmiştir. Fransızca da décoration olarak geçmektedir. Dekor etme, süsleme gibi anlamı vardır.


Yukarıda gösterilen güzel araba konumuza çok güzel örnek olacağını düşünüyorum :).

Bizim yapımız da ise nesneleri süslenmesi ve yeni özelliklerinin eklenmesi gibi düşünebilirsiniz. Yukarıda gösterilen şahin arabamızı da(emin değilim doğan da olabilir :) ) süsleme işlemini yapacağız.

Dekorasyon tasarımımız da 4 adet nesne tipi olacaktır. Bunlar aşağıdaki gibidir:

  • Component: Dinamik olarak sorumluluklar ekleyebileceğimiz sınıfa sunulan arayüz veya abstract sınıftır.
  • ConcreteComponent: Sorumluluk ekleyeceğimiz asıl nesnemizdir
  • Decorator: Dekorasyon işlemlerinden sorumlu, değişik dekorasyon şekillerinin üst sınıfıdır. Değişik dekorasyon şekillerini desteklemek için abstract class veya interface olarak tasarlanır.
  • ConcreteDecorator: Dekorasyon işleminin özelliğini barındıran asıl nesnelerdir.
Şimdi konumuzu anlatan uml diagramımıza bir bakalım.


Şimdi ne yaptığımıza bir bakalım. Öncelikle dekorasyonu uygalayacağımız sınıf olan Sahin isimli sınıfımızı görüyorsunuzdur. Sahin nesnemizin özelliklerini dinamik olarak değiştirmek için abstract classtan türettik.

Sahin arabamıza yeni özellikler katacağımız CarDecorator sınıfımızın uml diagramına baktığımızda Car sınıfından türetilmiş ve içinde car sınıfının örneğini barındırdığını görüyoruz. Buradaki amaç modifiye edilmek istenilen aracın dekorasyon sınıfı tarafından sarmalanıp yeni özellikleri de bu sınıftan türeyen dekorasyon sınıflarına bırakılmasıdır.

Biz kapıları geriye doğru açılan bir modifiye olmasını istedik. Bunun için CarDecorator sınıfımızdan SuicideDoorDecorator sınıfını türetti ve yeni özellikler ekledik. Uygulamamızın kodları da aşağıdaki gibi olacaktır.

Uygulamanın Başlangıç Sınıfı
Base Sınıf

Dekorasyonların dinamik olarak uygulanması için türetilen sınıftır.

Sahin arabamız :)
Dekorasyon uygulanacak sınıfımız.


Dekorasyon işlemlerine base olacak sınıfımız.


ve gün sonunda olacak kapı dekorasyon sınıfımız yukarıdaki gibidir.

Kodlara baktığımız zaman, dekorasyon tasarım deseninin amacının nesneye yeni özellikler katmak olduğunu anlayabiliriz.

Bir yazımızın daha sonuna geldik. Bir sonraki yazımız da görüşmek üzere....


Hiç yorum yok:

Yorum Gönder