C#

Composite Tasarım Deseni

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda tasarım desenlerinden biri olan composite tasarım desenini anlatacağım. Hadi başlayalım !

Aslında bu tasarım deseni diğer tüm tasarım desenlerinde de olduğu gibi C# diline özgü bir kavram değil, tüm nesne yönelimli programlama dillerinde daha temiz kod yazabilmek için oluşturulmuş ve yazılımcılar tarafından da kabul görmüş yazılı olmayan kurallardır ve nesne yönelimli programlama yapılabilen tüm dillerde uygulanabilmektedir.

Composite tasarım deseni, nesne yönelimli programlama (OOP) prensiplerinden biridir ve bir nesne hiyerarşisi oluşturmak için kullanılır. Bu desen, tek tek nesneler yerine bir grup nesneyi ele almanızı sağlar. Bu makalede, C# dilinde Composite tasarım desenini nasıl kullanabileceğinize dair birkaç örnek vereceğim.

Örnek 1: Bir Dosya Sistemi Yapısı

FileSystemComponent Sınıfının Oluşturulması

Bir dosya sistemi, birçok dosya ve klasörün bir arada olduğu bir yapıdır. Bu örnekte, dosya sistemi yapısını Composite tasarım deseni kullanarak tasarlayabiliriz. Aşağıdaki C# kodu, dosya sistemimizi temsil eden bir soyut sınıf olan “FileSystemComponent” sınıfını tanımlar:

abstract class FileSystemComponent
{
    protected string name;

    public FileSystemComponent(string name)
    {
        this.name = name;
    }

    public virtual void Add(FileSystemComponent component) { }

    public virtual void Remove(FileSystemComponent component) { }

    public virtual void Print()
    {
        Console.WriteLine(name);
    }
}

Bu sınıf, “Add”, “Remove” ve “Print” adlı üç tane ana metoda sahiptir. “Add” ve “Remove” metodları, alt öğeleri eklemek veya kaldırmak için kullanılır. “Print” metodunun amacı, dosya sisteminin yapısını ekrana yazdırmaktır.

File Sınıfının Oluşturulması

Alt sınıflar olarak “File” ve “Folder” sınıflarını tanımlayabiliriz. “File” sınıfı, dosyaları temsil ederken, “Folder” sınıfı, alt öğeleri olan klasörleri temsil eder. Aşağıdaki C# kodu, bu alt sınıfların tanımlarını gösterir:

class File : FileSystemComponent
{
    public File(string name) : base(name)
    {
    }

    public override void Print()
    {
        Console.WriteLine("File: " + name);
    }
}

class Folder : FileSystemComponent
{
    private List<FileSystemComponent> components = new List<FileSystemComponent>();

    public Folder(string name) : base(name)
    {
    }

    public override void Add(FileSystemComponent component)
    {
        components.Add(component);
    }

    public override void Remove(FileSystemComponent component)
    {
        components.Remove(component);
    }

    public override void Print()
    {
        Console.WriteLine("Folder: " + name);
        foreach (FileSystemComponent component in components)
        {
            component.Print();
        }
    }
}

“File” sınıfı, “FileSystemComponent” sınıfından türetilmiştir ve yalnızca dosya adını ve “Print” metodunu tanımlar. “Folder” sınıfı, hem “FileSystemComponent” sınıfından türetilir hem de alt öğeleri eklemek veya kaldırmak için “Add” ve “Remove” metodlarını tanımlar. “Print” metodunun, kendi adını yazdırdıktan sonra alt öğeleri döngüye sokarak ekrana yazdırır.

Uygulamanın Kullanılması

Aşağıdaki C# kodu, “File” ve “Folder” sınıflarını kullanarak bir dosya sistemi örneği oluşturur ve ekrana yazdırır:

class Program
{
    static void Main(string[] args)
    {
        Folder rootFolder = new Folder("Root");

        Folder folder1 = new Folder("Folder1");
        rootFolder.Add(folder1);

        File file1 = new File("File1.txt");
        folder1.Add(file1);

        Folder folder2 = new Folder("Folder2");
        rootFolder.Add(folder2);

        File file2 = new File("File2.txt");
        folder2.Add(file2);

        rootFolder.Print();
    }
}

Bu kod, “Root” adlı bir ana klasör oluşturur ve içinde iki alt klasör (“Folder1” ve “Folder2”) ve iki dosya (“File1.txt” ve “File2.txt”) oluşturur. Son olarak, “Print” metodunu kullanarak dosya sistemi yapısını ekrana yazdırır.

Örnek 2: Bir Çalışan Yapısı

EmployeeComponent ve Manager Sınıflarının Oluşturulması

Bu örnekte, bir şirketteki çalışanlar için bir hiyerarşi oluşturacağız. Çalışanlar, “Manager” ve “Employee” olmak üzere iki alt sınıftan türeyeceklerdir. “Manager” sınıfı, bir takımın yöneticisini temsil ederken, “Employee” sınıfı, takımdaki diğer çalışanları temsil eder. Aşağıdaki C# kodu, bu alt sınıfların tanımlarını gösterir:

abstract class EmployeeComponent
{
    protected string name;

    public EmployeeComponent(string name)
    {
        this.name = name;
    }

    public virtual void Add(EmployeeComponent component) { }

    public virtual void Remove(EmployeeComponent component) { }

    public virtual void Print()
    {
        Console.WriteLine(name);
    }
}

class Manager : EmployeeComponent
{
    private List<EmployeeComponent> employees = new List<EmployeeComponent>();

    public Manager(string name) : base(name)
    {
    }

    public override void Add(EmployeeComponent component)
    {
        employees.Add(component);
    }

    public override void Remove(EmployeeComponent component)
    {
        employees.Remove(component);
    }

    public override void Print()
    {
        Console.WriteLine("Manager: " + name);
        foreach (EmployeeComponent component in employees)
        {
            component.Print();
        }
    }
}

class Employee : EmployeeComponent
{
    public Employee(string name) : base(name)
    {
    }
}

Bu kod, “EmployeeComponent” adlı soyut bir sınıf tanımlar ve “Add”, “Remove” ve “Print” metodlarını içerir. “Manager” sınıfı, “EmployeeComponent” sınıfından türetilir ve alt öğeleri eklemek veya kaldırmak için “Add” ve “Remove” metodlarını tanımlar. “Print” metodunun, kendi adını yazdırdıktan sonra alt öğeleri döngüye sokarak ekrana yazdırır. “Employee” sınıfı, yalnızca çalışan adını içerir ve “EmployeeComponent” sınıfından türetilir.

Uygulamanın Kullanılması

Aşağıdaki C# kodu, “Manager” ve “Employee” sınıflar kullanarak bir çalışan hiyerarşisi oluşturur ve ekrana yazdırır:

class Program
{
    static void Main(string[] args)
    {
        Manager manager1 = new Manager("Manager 1");

        Employee employee1 = new Employee("Employee 1");
        Employee employee2 = new Employee("Employee 2");
        Employee employee3 = new Employee("Employee 3");

        manager1.Add(employee1);
        manager1.Add(employee2);
        manager1.Add(employee3);

        Manager manager2 = new Manager("Manager 2");

        Employee employee4 = new Employee("Employee 4");
        Employee employee5 = new Employee("Employee 5");

        manager2.Add(employee4);
        manager2.Add(employee5);

        manager1.Add(manager2);

        manager1.Print();
    }
}

Bu kod, “Manager 1” adlı bir üst yönetici oluşturur ve altında üç çalışan (“Employee 1”, “Employee 2” ve “Employee 3”) ve bir alt yönetici (“Manager 2”) bulunur. “Manager 2” altında iki çalışan (“Employee 4” ve “Employee 5”) bulunur. Son olarak, “Print” metodunu kullanarak çalışan hiyerarşisini ekrana yazdırır.

Sonuç

Bu örneklerde, C# kodu kullanarak Composite tasarım desenini anlattık. İlk örnekte, “File” ve “Folder” sınıflarını kullanarak bir dosya sistemi yapısı oluşturduk. İkinci örnekte ise, “Manager” ve “Employee” sınıflarını kullanarak bir çalışan hiyerarşisi oluşturduk. Bu örnekler, Composite tasarım deseninin nasıl kullanılabileceğini göstermektedir.

Evet composite tasarım deseni ve C# ile uygulanması bu şekilde olmakta. Tüm C# yazılarımıza buraya, diğer tasarım deseni yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu