Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Bridge Tasarım Deseni - Bridge Design Pattern | Decorator Tasarım Deseni - Decorator Design Pattern>>

Composite Tasarım Deseni - Composite Design Pattern

Yazar harunozer 08 December 2012

Composite Tasarım Deseni - Composite Design Pattern Composite tasarım deseni structual grubuna ait; ağaç yapısında ki nesne kalıplarının hiyerarşik olarak iç içe kullanılmasını düzenlemektir. Dofactory.com a göre kullanım sıklığı %80 civarındadır.

Hiyerarşik yapıya örnek olarak askeriyeyi verebiliriz. Rütbeli de olsa er de olsa hepsi askerdir. Rütbeli olup emrinde askerler de olsa ondan üst rütbedeki askerlerin emrindedir. Ve bir üst altına emir verdiğinde emir verilen askerin altındaki askerler de bu emirden etkilenir.

Composite tasarım deseninin uml diyagramı aşağıdaki gibidir.

composite uml

UML diyagramından anlaşılacağı üzere Composite tasarım deseninde 4 temel yapı vardır. Component yapısı abstract sınıf olarak tasarlanır, içinde property ve operasyonların tanımları yapılır. Composite ve life nesneleri ise Component nesnesini uygulayan gerçek nesneleri temsil eder. Composite nesnesi içinde Component listesi barındırır ve hiyerarşik olarak altında olan nesneler bu listede tutulurlar. Leaf nesnesinde ise altında nesneler olmayan en alt katmanı temsil eder.

*Karşılaştığım çoğu kaynakta sadece Composite de olacak ekle, sil gibi metotlar Component yapısında virtual olarak tanımlanmıştı. Fakat Leaf nesnesinde bu metotların olmaması gerektiğinden bence bu metotların Composite nesnesinde tanımlanması daha doğru olur.

Şimdi örnek bir uygulama geliştirelim. Örnek uygulamamızda şirket yapısını ele alalım. Çalışanları hiyerarşik olarak ele alalım ve göstermelik olarak ismini konsola yazdıralım. Uygulamamızın class diyagramı aşağıdadır.

composite class diyagram

 

Örnek uygulamamızın kodları açıklamaları ile beraber aşağıdadır.
//yardımcı enum
enum enPozisyon
{
    GenelMudur = 1,
    Mudur = 2,
    DepartmanSorumlusu = 3,
    Isci = 4
}

//component yapısı
abstract class Calisan
{
    protected string Ad;
    protected enPozisyon Pozisyon;
    public Calisan(string Ad, enPozisyon Pozisyon)
    {
        this.Ad = Ad;
        this.Pozisyon = Pozisyon;
    }
    public abstract void Goster(); //Leaf ve Composite de uygulanacak metot
}
//Leaf yapısı
class LeafCalisan : Calisan
{
    public LeafCalisan(string Ad, enPozisyon Pozisyon)
        : base(Ad, Pozisyon)
    {
    }
    public override void Goster()
    {
        Console.WriteLine("{0} {1}", base.Pozisyon.ToString(), base.Ad);
    }
}

//Composite  yapısı
class CompositeCalisan : Calisan
{
    List<Calisan> Calisanlari;
    public CompositeCalisan(string Ad, enPozisyon Pozisyon)
        : base(Ad, Pozisyon)
    {
        Calisanlari = new List<Calisan>();
    }
    public void Ekle(Calisan c)
    {
        Calisanlari.Add(c);
    }
    public override void Goster()
    {
        Console.WriteLine("{0} {1}", base.Pozisyon.ToString(), base.Ad);
        foreach (Calisan item in Calisanlari)
        {
            item.Goster();
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        //İlk olarak Root Composite yi oluşturuyoruz
        CompositeCalisan GenelMudur = new CompositeCalisan("Kemalettin", enPozisyon.GenelMudur);
        //Genel müdürün altında çalışan diğer çalışanları hiyerarşik olarak ekliyoruz
        //Altında eleman olmayan çalışanlar LeafCalisan sınıfı ile ifade edilir.
        CompositeCalisan Mudur = new CompositeCalisan("Ahmet ", enPozisyon.Mudur);
        Mudur.Ekle(new LeafCalisan("mehmet ", enPozisyon.Isci));
        Mudur.Ekle(new LeafCalisan("ayşe ", enPozisyon.Isci));
        //Root komposite altındaki Composite yi ekliyoruz.
        GenelMudur.Ekle(Mudur);
        //Composite için döngü ile altındaki Calisan sınıfları, Leaf için sadece kendisi
        GenelMudur.Goster();
        Console.ReadKey();
    }
}
 
Uygulamanın kodlarını aşağıdaki linkten indirebilirsiniz.

CompositeSample.rar

Tam Sayfa
Tags tasarım desenleri,
Kategoriler c#.net, Tasarım Desenleri
İşlemler
Bu Makale 4  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri