Decorator Design Pattern

Decorator design pattern, nesnemizin yapısını bozmadan, nesnemize yeni bir fonksiyonellik katmamızı sağlıyor. Bu pattern’da, decorator nesnesi, fonksiyonellik katacağı nesneyi referans olarak tutuyor ve onun hangi fonksiyonunu decorate edecekse önce o fonksiyonu, ardından da kendi fonksiyonunu çağırıyor. Böylece referans olarak tuttuğu nesneye yeni bir fonksiyon katmış oluyor.

Biraz karışık bir tanım oldu, farkındayım. Gelin bir örnekle açıklayalım.

Senaryo

Bir Attack nesnesi düşünün. İçinde sadece bir fonksiyon tutuyor; SetDamage()… Biz bu örnekte, Punch ve HighKick nesnelerini Attack nesnesinden türeteceğiz. Ve senaryomuz gereği, Punch ve HighKick nesnelerine zehirleme fonksiyonelliğini katacağız. Yani, herhangi bir Attack nesnesinin yapısını bozmadan, ona zehirleme fonksiyonelliği kazandıracağız.

Adım 1

Attack nesnemizi oluşturalım. Attack nesnemiz sadece bir fonksiyon bulunduracak. O da SetDamage() fonksiyonu. Attack nesnemizi oluşturduktan sonra, ondan HighKick ve Punch nesnelerimizi türetelim.

Attack Sınıfı

Punch Sınıfı 

HighKick Sınıfı

Adım 2 

Bu adımda Attack Decorator’ımızı yazacağız. Bu nesne, herhangi bir Attack nesnesini alıp decorate edebilecek.

AttackDecorator

Adım 3 

Attack Decorator’ımızdan Poison Attack Decorator nesnemizi türeterek, işi bir adım daha ileri götürelim. İlerde Fire Attack Decorator gibi yeni decorator’lar türetmek istersek diye Attack Decorator’ı base olarak tutmayı seçtik.

PoisonAttackDecorator

Adım 4 

Demomuzu yazalım ve örneğimizi sonlandıralım.

DecoratorDesignDemo

 Çıktı

 

Görüş ve önerileriniz için yorum bırakmaktan çekinmeyin lütfen. Bana cosgun.halil@gmail.com adresinden ulaşabilirsiniz.

Saygılar.