Composite tasarım deseni, nesneleri ağaç yapısına göre düzenleyerek ağaç yapısındaki alt üst ilişkisini kurmaya yarayan bir desendir.
Bu tasarım deseninin amacının nesneleri ağaç yapısına göre düzenleyerek, ağaç yapısındaki alt üst ilişkisini kurmak olduğunu söyledik. Burada ağacın herbir yapısı ortak bir arayüzü uygular. Ortak arayüzü uygulamasının sebebi ise birbirine benzer yapılar ile çalışıyor olmak bu benzerlik bizlere esnek bir yapı sunacaktır.
Aşağıda bu desene ait UML diyagramı yer almaktadır.
Client: İstemci sınıf.
Component: Soyut yapımızdır, özellikler içerisinde tanımlıdır ve diğer sınıflar bu yapıyı uygular.
Composite: Alt öğeleri olan sınıfımızdır, Component'in somut halidir ve içerisinde Component listesi tutmaktadır.
Leaf: Ağaç yapısındaki en alt elemanı temsil etmektedir.
Senaryo olarak iç içe geçmiş kategorileri ve kategorilerin en altında bulunan ürünleri düşünebiliriz.
C# Kod Örneği:
// Soyut yapımızdır.// UML diyagramındaki Component kısmına denk gelmektedir.// Diğer istemci sınıflar bu yapıyı uygular.// Diğer sınıfların uygulayacağı hiyerarşiyi çizme metotunu içermektedir.publicinterfaceICatalogComponent{voidDrawHierarchy();}
// Somut yapımızdır.// UML diyagramındaki Leaf kısmına denk gelmektedir.// Hiyerarşinin en alt tabakasını temsil etmektedir.classProduct:ICatalogComponent{privatestring _name;publicProduct(string name) { _name = name; }publicvoidDrawHierarchy() {Console.WriteLine(_name); }}
ProductCatalog items =newProductCatalog("Ürünler");ProductCatalog phones =newProductCatalog("Telefonlar");ProductCatalog iPhone =newProductCatalog("iPhone Telefonlar");ProductCatalog samsung =newProductCatalog("Samsung Telefonlar");Product iphone5Item =newProduct("iPhone 5 Telefon");Product samsungGalaxyItem =newProduct("Samsung Galaxy Telefon");// En üst hiyerarşiye telefon düğümü ekleniyor.items.Add(phones);// Telefon hiyerarşisine Samsung ve iPhone düğümleri ekleniyor.phones.Add(iPhone);phones.Add(samsung);// iPhone hiyerarşisine iPhone5 yaprağı (En alt yapıdır, içerisinde bir düğüm içermez) ekleniyor.iPhone.Add(iphone5Item);// Samsung hiyerarşisine Samsung Galaxy yaprağı (En alt yapıdır, içerisinde bir düğüm içermez) ekleniyor.samsung.Add(samsungGalaxyItem);items.DrawHierarchy();// output:// -Ürünler// --Telefonlar// ---iPhone Telefonlar// ----iPhone 5 Telefon// --Samsung Telefonlar// ---Samsung Galaxy Telefon