Chain of Responsibility Pattern Nedir ve Nasıl Kullanılır?

Chain of Responsibility (Sorumluluk Zinciri) Tasarım Deseni, yazılım geliştirme sürecinde bir istek göndericisinin, isteği alıcılara doğrudan göndermek yerine bir zincir üzerinden iletmesini sağlar. Bu desen, özellikle esnekliği ve genişletilebilirliği nedeniyle yazılım geliştiricileri tarafından sıklıkla tercih edilmektedir.

Chain of Responsibility Nedir?

Sorumluluk Zinciri Deseni, bir istek için birden fazla işleyicinin (handler) olduğu durumlarda kullanılmaktadır. Bu işleyiciler, birbirlerine bağlı bir zincir oluşturur. İstek, bu zincir boyunca ilerler ve uygun işleyici tarafından ele alınır. Bu desen temel amacı itibariyle, istemciyi işleyicilerden ayırır böylece daha esnek ve genişletilebilir bir yapı oluşturur.

Örnek Senaryo

Bir müşteri hizmetleri uygulaması düşünelim. Bu uygulamada gelen şikayetler, farklı seviyelerdeki temsilciler tarafından ele alınsın; Müşteri Temsilcisi, Müdür Yardımcısı ve Müdür. Eğer Müşteri Temsilcisi şikayeti çözemezse, şikayet bir üst seviyeye iletilecektir.

Java ile Chain of Responsibility Deseni

Şimdi bu deseni Java ile nasıl uygulayabileceğimize bakalım. Öncelikle, işleyici (Handler) sınıfını tanımlayalım:

abstract class Handler {
    protected Handler nextHandler;

    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }

    public abstract void handleRequest(String request);
}

Şimdi, farklı seviyelerdeki işleyicileri (Müşteri Temsilcisi, Müdür Yardımcısı, Müdür) tanımlayalım:

class CustomerServiceRepresentative extends Handler {
    @Override
    public void handleRequest(String request) {
        if (request.equals("basic")) {
            System.out.println("Müşteri Temsilcisi şikayeti çözüyor.");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

class AssistantManager extends Handler {
    @Override
    public void handleRequest(String request) {
        if (request.equals("intermediate")) {
            System.out.println("Müdür Yardımcısı şikayeti çözüyor.");
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

class Manager extends Handler {
    @Override
    public void handleRequest(String request) {
        if (request.equals("complex")) {
            System.out.println("Müdür şikayeti çözüyor.");
        } else {
            System.out.println("Şikayet çözülemedi.");
        }
    }
}

Son olarak, bu işleyicileri zincir halinde bağlayalım ve bir isteği işleyelim:

public class Main {
    public static void main(String[] args) {
        Handler customerServiceRepresentative = new CustomerServiceRepresentative();
        Handler assistantManager = new AssistantManager();
        Handler manager = new Manager();

        customerServiceRepresentative.setNextHandler(assistantManager);
        assistantManager.setNextHandler(manager);

        customerServiceRepresentative.handleRequest("basic");
        customerServiceRepresentative.handleRequest("intermediate");
        customerServiceRepresentative.handleRequest("complex");
        customerServiceRepresentative.handleRequest("unknown");
    }
}

Sonuç

Chain of Responsibility Deseni, yazılım uygulamalarında esneklik ve genişletilebilirlik sağlar. İşleyiciler arasındaki sorumlulukları dağıtarak, kodun bakımını ve genişletilmesini kolaylaştırır. Bu desen, özellikle büyük ve karmaşık yazılım projelerinde, iş mantığının farklı katmanlara dağıtılması gerektiğinde oldukça faydalıdır.

Bu blog yazısında, Sorumluluk Zinciri Deseni’nin temel prensiplerini ve Java ile nasıl uygulanabileceğini anlattım. Bu deseni projelerinizde kullanarak yazılımınızı daha esnek ve yönetilebilir hale getirebilirsiniz.

Bir yanıt yazın

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