Tür: Yapısal
Şablon
Diğer Adı:
Sarmalayıcı (Wrapper)
Adında
anlaşılacağı gibi bezeme şablonu ilişkilendirildiği (bu manada Ingilizce
'attach' fiili kullanılır) sınıfı dinamik olarak dekore eder. Bezeme şablonuna
ayrıca sarmalıyıcı (Wrapper) da denir. Bu isimle daha çok karşılaşmak mümkündür
çünkü C# dilinin kendi içinde doğal türlerin (int, float, double gibi) birer
Wrapper sınıfları bulunur. Buradaki konsept her ne kadar farklı da olsa gerçek
hayatta bir şablonun zaten tek ve nihayi bir hali yoktur.
Bezeme şablonuna
alternatif olarak sınıf türetme düşünülebilir. Fakat bu durumda bir sınıfın
alacağı durum önceden belirlenmiş (statik olarak) ve sınırlandırılmış olur. Bu
genellikle karşılaşılan bir durumdur fakat bazı durumlar vardır ki dinamik
olarak bezemek daha çok işimize gelebilir. Örneğin bir sınıfımıza
ekleyebileceğimiz n tane yeteneğimiz (capability) olsun. Bu yeteneklerin bir
yada bir kaçını destekleyen alt sınıflar elde etmek istersek n'in bütün
kombinasyonlarını toplamamız gerekir. Fakat bu işi bezeme sınıfları ile
yaparsak sadece n tane bezeme sınıfını türetmek yeterli olur.
Bezeme şablonu
oldukça sık karşılaşılan bir şablondur. Son zamanlarda moda olan AOP (Aspect
Oriented Programming) özellikle bezeme şablonu üzerine bina olmuştur. AOP'ta
Interceptor denilen nesneler kendisi için özel olarak bezenmiş sınıflara
sonradan raporlama gibi iş hayatında önemli özellikler katabilir.
Bezeme şablonu en
çok katmanlı yapılarda kullanılır. Her sınıf bir katman teşkil eder. Katmanlı
yapılara da en iyi örnek görsel uygulamalardır (GUI App - Graphic User
Interface Application). İlk önce boş ekranı temsil eden bir sınıf olur. Bu
sınıf bile tek başına görüntü oluşturabilir. Fakat çeşitli kütüphanelerde
(.NET, Java Swift, Qt gibi) farklı olmakla birlikte çok benzer katmanlı görsel
sınıflar vardır. Bu sınıflar hepsi aynı sınıftan türerler. Hepsinin kendini
çizdirme metodları vardır. İstenilen çizdirme özelliği için var olan görsel
nesne bu yeteneği temsil eden sınıf tarafından sarmalanır.
Burada GoF'un
meşhur kitabı olan "Design Patterns: Elements of Reusable Object Oriented
Software"dan alıntı. Burada görsel olarak katmanlamanın nasıl yapıldığı ve
sonucun neye dönüştüğü gösterilmiştir. Aşağıda da bu yapının sınıf çizelgesi de
vardır.
Burada
VisualComponent ana sınıfımızdır. Genellikle soyut sınıf (abstract class) olur.
TextView sınıfı sadece verilen yazıyı göstermekle yükümlüdür. Diğer
Decorator'dan türeyen ScrollDecorator ve BorderDecorator sınıfları TextView
sınıfını isteğe bağlı olarak bezer. İster biri, ikisi yada hiçbiri
kullanılmayabilir.