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.

Onur Dayıbaşı
Design Patterns

--

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ı

Decorator

Ö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.

Decorator Code

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--