Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Design Pattern - Chain Of Responsibility



  April 27, 2019    Labels:,,,,,,, 

Chain Of Responsibility patern'ı bir dizi işlemi o işlemin karmaşıklığını bilmeden gevşek bağlı bir şekilde yapmamızı sağlar. Bu şekilde istemcide bir değişiklik yapmadan yapılan işlem değiştirilebilir. Yapılacak işlem birden fazla nesnenin kullanılmasını gerektiriyor ve bu nesnelerin yaptıkları işlemlerin belli bir sırası var ise bu pattern kullanılır. Yani istemcinin tek bir işlem için birden fazla nesneyi bilmesi ve onları bu işlem için sırasıyla çalıştırması yerine bu pattern ile işlem tanımlanır ve nesneler kendi aralarında iletişim kurarak bu işlemi gerçekleştirirler.
Örnek verecek olursak masaüstü programlamada bir pencere içerisinde bir başka penceremizin olduğunu ve onun içinde bir resim olduğunu düşünürsek o resme tıklanma event'ini o resim, içinde bulunduğu pencere ve o pencerenin içinde bulunduğu pencere yakalamak isteyebilir. Bunun için bu event içinde bulunduğu tüm view elemanlarına hiyerarşik bir şekilde gönderilir. Bu işlem sırasında bir zincir şeklinde her view içinde bulunduğu view elemanını bilir.

Uygulama
  • İstekleri karşılayacak ve bir zincir şeklinde işleyecek sınıflar için bir arayüz olan Handler arayüzü tanımlanır. Bu arayüzün istekleri karşılayacak handle metodu yazılır.
  • İstekleri yerine getirecek sınıflar Handler arayüzünü implement ederler.
  • Client nesne Handler arayüzünü kullanarak istekleri yerine getirecek sınıfları kullanır.




public interface Handler {
    public void handleRequest();
}

public class HandlerConcrete1 implements Handler {
    Handler handler = new HandlerConcrete2();
    public void handleRequest() {
        //işlemler
        handler.handleRequest();
    }
}

public class HandlerConcrete2 implements Handler {
    public void handleRequest() {
        //işlemler
    }
}

public class Client {
    public static void main () {
        Handler handler = new HandlerConcrete1();
        handler.handleRequest();
    }
}



No comments:

Post a Comment