8-) Composite Design Pattern
Bir ağaç yapısı inşa etmek istiyorsanız ve kurduğunuz yapının yatay-dikey olarak kolayca genişlemesi sizin için önemliyse composite design pattern’ını kullanmalısınız.
Composite design pattern şu öğelerden meydana gelir.
Component: Komposizyonda child objeler içerecek sınıfın inherit edileceği soyut veya base class’tır. Child objeler için ekleme, çıkarma gibi metodları vardır.
Leaf: Komposizyondaki en uç nesnelerdir. Child obje barındırmayan nesnelerdir.
Composite: Child obje barındıran, Component soyutu implemente edilmiş somut sınıflardır.
Client: Komposizyonda Component soyutu implemente edilmiş objeler ile işlemler yapar.
Şimdi yukarıdaki organizayon yapısını c# 9 kodları ve composite design pattern’ı ile inşa edelim.
İlk olarak Component’e karşılık gelen Employee abstract sınıfımızı oluşturalım.
Employee sınıfının implemente ederek oluşturacağımız Leaf görevindeki IndividualEmployee sınıfını oluşturalım. Bu sınıfın kendine bağlı çalışanları olmayacağı için Add, Remove ve GetTeamSalary metodlarını override etmedim.
Şimdide kendine bağlı çalışanları olan Composite görevindeki ExecutiveEmployee sınıfını tanımlayalım.
Temel sınıflarımızı oluşturduk. Bu temeli kullanarak organizasyonu oluşturalım.
Employee sınıfındaki chart methodunu kullanarak tüm organizasyonun ya da belirli bir takımdan başlayarak aşağıya doğru şemayı çıkarabiliriz. Aynı şekilde GetTeamSalary methoduyla organizasyonun istediğimiz kısmının maaş toplamını alabiliriz.
FrontEndLeader ekibinin şeması ve toplam maaş bilgisi çıktısı şu şekilde olacaktır.
Ya da GeneralManager’dan başlayarak tüm bilgi için kodlar ve çıktı şöyle olacaktır.
Makalenin kodlarına ve diğer design pattern örneklerine tıklayarak ulaşabilirsiniz.