Üst Düzey Programlama Tasarım Şablonları Üst Düzey Programlama 1
Decorator şablonu belirli nesnelerin davranışlarını yeni türetilmiş sınıflar oluşturmadan değiştirmemizi sağlar. Sınıfların varsayılan kodlarını değiştirmeden ek davranışlar kazanmasını sağlamak için kullanılır. Bu şekilde her zaman değişen ihtiyaçlarımıza cevap verebilecek olan sınıfları tasarlayabiliriz. Üst Düzey Programlama 2
Örneğin; bir GUI bileşenine kenarlıklar(border) eklemek istiyoruz yada kaydırma çubuğu (scrollbars) eklemek istiyoruz. Bu nesneden iki yeni nesne türeterek bu işlemi yapabiliriz. Bu şekilde yaparsak her nesne için kenarlık çizdirmek için kenarlık çizimide yapabilen yeni nesneler türetmemiz gereklidir. Hepsinde yapılan işlem kenarlık çizmedir, buna rağmen tüm kenarlığa ihtiyacı olan bileşenler için yeni sınıflar türetmemiz gerekir. Bu gibi durumlarda Decorator kullanılır. Üst Düzey Programlama 3
UML Diyagramı: Component operation() ConcreateComponent operation() Decorator dostuff() Decorator(component) ConcreateDecoratorA dostuff() ConcreateDecoratorB dostuff() Üst Düzey Programlama 4
Ör: Bir window nesnemiz olsun ve bu pencereye dinamik olarak kaydırma çubuğu(scroll) ve kenarlık(border) özelliği eklemek istiyelim. Üst Düzey Programlama 5
Üst Düzey Programlama 6
Üst Düzey Programlama 7
Üst Düzey Programlama 8
Mesrubat tanim fiyat gettanim() Espresso SadeKahve KafeinsizKahve... Kahvenizi isterken sade isteyebileceginiz gibi bazı ek maddelerinde eklenmesini isteyebilirsiniz. Örneğin, süt, süt tozu, krema, çikolata... bunları ekledigimizde içecegin fiyatı değişmektedir. Bu özellikleri sınıflara katmak için ne yapmalıyız? Üst Düzey Programlama 9
Mesrubat tanim fiyat gettanim() Espresso SadeKahve KafeinsizKahve... SütlüEspresso KremaliEspresso ÇikolatalıEspresso SütlüÇikolatalıEspresso... Aynı şekilde tüm olasılıklara göre sınıflar geliştirmek bir çözüm müdür? Üst Düzey Programlama 10
Mesrubat tanim fiyat sütvarmi çikolatavarmi kremavarmi süttozuvarmi gettanim() sütvarmi() sütekle() kremavarmi() kremaekle() çikolatavarmi() çikolataekle()... -Sütün yada diger ek maddelerin fiyatları değişirse? -Yeni bir ek madde gelirse? -Örneğin buzlu çay meşrubatı geliştirmek istesek? -Müşteri 2 kat süt isterse? Üst Düzey Programlama 11
Peki ne yapmalıyız? 1. Bir meşrubat(sadekahve) nesnesi oluştururuz. 2. Bu nesneyi Süt nesnesi ile dekore ederiz. 3. Bu nesneyi Çikolata nesnesi ile dekore ederiz. 4. Bu nesneyi istedigimiz kadar diger dekoratörler ile dekore ederiz. 5. metodunu çagırdıgımızda hepsinin toplamını alabiliriz. Decorator tasarım şablonunun diğer adı Wrapper (Sarmalayıcı) dır. Üst Düzey Programlama 12
1 SadeKahve 2 Süt SadeKahve 3 Çikolata Süt SadeKahve Üst Düzey Programlama 13
Mesrubat tanim fiyat gettanim() EkMaddeDecorator Espresso SadeKahve Mesrubat KafeinsizKahve Süt Mesrubat Çikolata Mesrubat... Üst Düzey Programlama 14
Üst Düzey Programlama 15
Üst Düzey Programlama 16
Üst Düzey Programlama 17
Üst Düzey Programlama 18
Üst Düzey Programlama 19
Üst Düzey Programlama 20
Üst Düzey Programlama 21
Üst Düzey Programlama Tasarım Şablonları Üst Düzey Programlama 22