Composite Pattern Nedir ve Nasıl Kullanılır?

Composite Pattern, nesneleri ağaç yapısında düzenlemek için kullanılır ve bu sayede bireysel nesneler ve nesne gruplarını aynı şekilde işlememizi sağlar. Bu tasarım deseni, “bileşik nesne” ve “yaprak nesne” olarak adlandırılan iki tür nesneyi içerir. Bileşik nesneler, diğer nesneleri içerebilen ve onlarla aynı arayüzü paylaşan nesnelerdir. Yaprak nesneler ise herhangi bir alt nesne içermez ve temel işlemleri gerçekleştiren nesnelerdir.

Composite Pattern Örnek Senaryo

Bir grafik düzenleme uygulaması geliştirdiğimizi varsayalım. Bu uygulamada şekiller, çizgiler, daireler gibi temel bileşenler bulunur ve bu bileşenler gruplar halinde organize edilebilir. Composite Pattern’i kullanarak bu bileşenleri ve grupları tek bir yapıda birleştirebiliriz.

Interface Tanımı

Öncelikle, bileşenlerin ortak arayüzünü tanımlayalım:

interface Graphic {
    void draw();
}

Yaprak Sınıflar

Daha sonra, temel grafik bileşenlerini (yaprak nesneleri) tanımlayalım:

class Line implements Graphic {
    @Override
    public void draw() {
        System.out.println("Drawing a line");
    }
}

class Circle implements Graphic {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

Bileşik Sınıf

Şimdi, diğer grafik bileşenlerini içerebilen bileşik nesnemizi tanımlayalım:

import java.util.ArrayList;
import java.util.List;

class CompositeGraphic implements Graphic {
    private List<Graphic> childGraphics = new ArrayList<>();

    public void add(Graphic graphic) {
        childGraphics.add(graphic);
    }

    public void remove(Graphic graphic) {
        childGraphics.remove(graphic);
    }

    @Override
    public void draw() {
        for (Graphic graphic : childGraphics) {
            graphic.draw();
        }
    }
}

Composite Pattern Kullanımı

En nihayetinde artık Composite Pattern’i kullanarak grafik nesnelerimizi oluşturabiliriz:

public class Main {
    public static void main(String[] args) {
        // Yaprak nesneleri oluştur
        Graphic line1 = new Line();
        Graphic circle1 = new Circle();
        
        // Bileşik nesne oluştur ve yaprak nesnelerini ekle
        CompositeGraphic composite1 = new CompositeGraphic();
        composite1.add(line1);
        composite1.add(circle1);
        
        // Başka bir bileşik nesne oluştur ve önceki bileşiği ekle
        CompositeGraphic composite2 = new CompositeGraphic();
        composite2.add(composite1);
        
        // Bileşik nesneleri çiz
        composite2.draw();
    }
}

Bu örnekte, CompositeGraphic sınıfı, diğer Graphic nesnelerini içerebilen bir bileşik nesne olarak işlev görür. Main sınıfında ise hem yaprak nesneler hem de bileşik nesneler oluşturulur ve bileşik nesneler, içerdikleri tüm grafik bileşenlerini tek bir işlemle çizer.

Sonuç

Composite Pattern, karmaşık hiyerarşik yapıları basit ve esnek bir şekilde yönetmeyi sağlar. Bu desen sayesinde, nesneleri tek tek veya gruplar halinde aynı şekilde işleyebiliriz, bu da kodun genişletilebilirliğini ve bakımını kolaylaştırır. Bu yazıda, grafik bileşenleri örneği üzerinden Composite Pattern’in nasıl uygulanacağını gösterdim. Umarım bu örnek, Composite Pattern’in nasıl çalıştığını anlamanıza yardımcı olmuştur.

Paylaşmak ister misin?

Bir yanıt yazın

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