Programlamada Tasarım Desenleri #6 — Composite (Bileşik) Design Pattern (C# .NET ile Uygulama)

Merhaba sevgili yazılım geliştiriciler! 🎯 Bu yazı dizimizin 6. bölümünde, Composite Design Pattern (Bileşik Tasarım Deseni)’ni ele alacağız. .NET C# üzerinde çalışan geliştiriciler için hem teorik hem de uygulamalı olarak bu tasarım desenini nasıl hayata geçireceğimizi detaylıca anlatacağım.

Bu desen özellikle ağaç yapılarında, nesne gruplarının ve tekil nesnelerin aynı şekilde işlenmesini sağlamak için oldukça etkilidir.


👉 Composite Design Pattern Nedir?

Composite Pattern, GOF (Gang of Four) tasarım desenlerinden biridir ve yapısal (structural) desen kategorisine girer.

Bu desen; bir nesne hiyerarşisi (örneğin bir organizasyon, menü, grafik bileşenleri vb.) oluşturmak ve hem tekil nesnelerin hem de nesne gruplarının aynı şekilde muamele görmesini sağlamak için kullanılır.

Kullanım Senaryoları:

  • Dosya sistemleri (klasör ve dosya yapısı)
  • Kurumsal yapılar (şirket, departmanlar, çalışanlar)
  • UI bileşenleri (container ve componentlar)
  • Menü sistemleri

🧠 Tasarımın Mantığı

Composite Pattern ile, bileşenleri (composite) ve yaprakları (leaf) aynı arayüz üzerinden yönetebiliyoruz.

Bu desen genellikle şu bileşenlerden oluşur:

  1. Component (Arayüz/Soyut Sınıf): Ortak davranışı tanımlar (örn. Göster())
  2. Leaf (Yaprak – Tekil Nesne): Gerçek davranışı uygulayan sınıftır.
  3. Composite (Bileşik – Alt nesneleri olan): Alt nesneleri tutar ve component arayüzünü uygular.

📦 C# ile Composite Design Pattern Örneği: Organizasyon Yapısı

🎯 Amacımız:

Bir şirket organizasyon ağacı düşünelim. Bu yapıya hem yöneticiler (alt birimleri olabilir), hem de bireyler (çalışan) dahil edilecek. Ve her biri aynı “görev göster” davranışını kullanacak.


🧩 Aşamalarla Uygulama (C# .NET)

1. Component (IOrganizasyon)

public interface IOrganizasyon
{
    void GosterGorev(int sekme = 0);
}

2. Leaf (Calisan)

public class Calisan : IOrganizasyon
{
    private readonly string _isim;
    private readonly string _gorev;

    public Calisan(string isim, string gorev)
    {
        _isim = isim;
        _gorev = gorev;
    }

    public void GosterGorev(int sekme = 0)
    {
        Console.WriteLine($"{new string(' ', sekme)}- {_isim} ({_gorev})");
    }
}

3. Composite (Departman)

public class Departman : IOrganizasyon
{
    private readonly string _isim;
    private readonly List _altBirimler = new();

    public Departman(string isim)
    {
        _isim = isim;
    }

    public void Ekle(IOrganizasyon organizasyon)
    {
        _altBirimler.Add(organizasyon);
    }

    public void GosterGorev(int sekme = 0)
    {
        Console.WriteLine($"{new string(' ', sekme)}+ {_isim}");
        foreach (var birim in _altBirimler)
        {
            birim.GosterGorev(sekme + 2);
        }
    }
}

4. Kullanım (Program.cs)

class Program
{
    static void Main(string[] args)
    {
        var genelMudur = new Departman("Genel Müdürlük");

        var yazilimDepartmani = new Departman("Yazılım Departmanı");
        yazilimDepartmani.Ekle(new Calisan("Ahmet", "Yazılım Geliştirici"));
        yazilimDepartmani.Ekle(new Calisan("Zeynep", "Mobil Geliştirici"));

        var insanKaynaklari = new Departman("İnsan Kaynakları");
        insanKaynaklari.Ekle(new Calisan("Elif", "İK Uzmanı"));

        genelMudur.Ekle(yazilimDepartmani);
        genelMudur.Ekle(insanKaynaklari);

        genelMudur.GosterGorev();
    }
}

Çıktı:

+ Genel Müdürlük
  + Yazılım Departmanı
    - Ahmet (Yazılım Geliştirici)
    - Zeynep (Mobil Geliştirici)
  + İnsan Kaynakları
    - Elif (İK Uzmanı)

🎨 Görsel: Yapı Ağacı Diyagramı

Composite Design Pattern Şeması

Yukarıdaki diyagramda Composite Pattern’deki sınıflar ve ilişkiler gösterilmektedir. Her “Composite” nesne, aynı tipi taşıyan alt nesneleri (“Component”) içerebilir.


🚀 Avantajları

  • ✅ Hiyerarşik yapıların sade ve okunabilir şekilde modellendiği esnek bir yapı sunar.
  • ✅ Yeni bileşen ve alt birimlerin kolayca eklenmesini sağlar.
  • ✅ Tekil ve bileşik nesneleri aynı anda yönetebiliriz, kod tekrarını azaltır.

⚠️ Dezavantajları

  • Tüm nesnelerin aynı davranışı göstereceği varsayımı bazen esnekliği kısıtlayabilir.
  • Çok kompleks hiyerarşilerde debug etmek zor olabilir.

🔍 SEO Perspektifiyle Uygulama

Anahtar kelimeler:
– Composite Design Pattern
– .NET C# tasarım desenleri
– Yapısal tasarım desenleri
– C# ile organizasyon ağacı oluşturma
– Composite pattern örneği
– Tasarım desenleri C#
– object oriented programming design patterns

Kullanıcıların bu desen ile alakalı en çok sorduğu sorular:

❓ “C# Composite Pattern gerçek hayat örneği nedir?”

Dosya sistemi, organizasyon şemaları ve GUI bileşenleri gerçek hayatta composite pattern kullanımına örnektir.

❓ “.NET projelerinde bu deseni nerede kullanmalıyım?”

Menü yönetimi, modül bağımlılığı, kategori sistemleri ve organizasyon yapıları bu desenin kullanımı için uygundur.


✍️ Sonuç

Composite Design Pattern, hem soyutlama hem de birlikte çalışma (composability) açısından oldukça güçlü bir yapıdır. .NET C# ile bu yapıları oluşturmak oldukça kolay ve anlaşılırdır. Bu deseni uygulayarak yazılım projelerinizde daha ölçeklenebilir ve yönetilebilir mimariler geliştirebilirsiniz.


💬 Sizin Deneyiminiz?

Composite Pattern’i projelerinizde kullandınız mı? Nerelerde uyguladınız? Yorumlarda düşüncelerinizi ve deneyimlerinizi paylaşın! 👇👇👇


Etiketler:
#CSharp #Dotnet #DesignPatterns #CompositePattern #YazılımMühendisliği #ObjectOrientedDesign #TasarımDesenleri #YazılımGeliştirme


Yeni tasarım deseni konularında görüşmek üzere! 🚀
Bir sonraki yazımızda: #7 — Decorator Design Pattern ile birlikte olacağız. Takipte kalın! 💡

Organizasyon Şeması
Soyut Bileşik Desen Temsil
Yazılımcı Çalışırken
Tekil ve Bileşik Karşılaştırması

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir