TASARIM ÖRÜNTÜLERİ
Decorator
Structural Patterns bir örneği olan Decorator örüntü mevcut tasarımınızda herhangi bir sınıfınızın yaptığı iş yeterli olmadığı ve sınıfınıza yeni fonksiyonlar eklemeniz gerektiği durumda aynı arayüzü koruyarak ve mevcut sınıfları ve algoritmaları değiştirmeden bu eklemeyi nasıl yapabilirsiniz.
Bilgi Notu: Diğer tüm Tasarım Örüntüleri yazıma bu linkten ulaşabilirsiniz.
Hangi Durumda
Not* Decorator pattern uygulamalarda sıkça kullanmak zorunda kaldığım örüntülerden birisidir.
Yapınızı oluşturursunuz çalışan bir yapınız var ve bir arayüzden türemiş bir çok nesne bulunuyor. Bu arayüz mekaniklerini kullanan bir çok istemci var. Siz hiç bir arayüz metodu değiştirmeden çağrılan metodun içerisinde ekstra işlemler yapmak durumunda iseniz bu örüntüyü kullanabilirsiniz.
Yapısı
Örnek
Aşağıda örnekte görüldüğü gibi Shape arayüzünün görevi ilgili draw() fonksiyonunu çağırarak çiziminin sağlanmasıdır. Biz buna RedBorder ekstre özelliği kazandırmak ister isek. Önümüzde 2 seçenek bulunmaktadır.
- Shape sınıfını güncellemek
- Shape interface türeyen Decorator oluşturup bu fonksiyonu Decorator içerisinde gerçekleştirmek.
2nci seçeneğin avantajı mevcut fonksiyon ve algoritmalara dokunmadan fonksiyon eklemelerini dışarıdan yapabilmektir. Aşağıdaki kodlarda fonksiyon eklemesini RedShapeDecorator.draw() fonksiyonunda yaptığını görmekteyiz. Bu sayede mevcut Circle, Rectangle vb.. Shape türeyen sınıflarımızda bir değişiklik yapmadan kodumuzu değiştirmiş olduk.
Kod
Burada İstediğimiz Shape sınıfını oluşturup bunu RedShapeDecorator verdiğimizde , artık RedShapeDecorator üzerinden draw kodunu çağırabiliriz.
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.