MTI TEK
  • Home
  • About
  • LLMs
  • Docker
  • Kubernetes
  • Java
  • All Resources
Design Patterns | Chain of Responsibility
  1. References
  2. Example
    • The Object
    • The Abstract Handler
    • The Concrete Handler
    • A simple class to test the Chain of Responsibility design pattern

  1. References
    • Definition: (source: http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern)

      The Chain of Responsibility pattern is a design pattern consisting of a source of command objects and a series of processing objects.
      Each processing object contains logic that defines the types of command objects that it can handle; the rest are passed to the next processing object in the chain.
  2. Example
    • The Object:

      public class Request {
          final private StringBuilder data = new StringBuilder();
      
          public void append(final String value) {
              data.append(value);
          }
      
          public String toString() {
              return data.toString();
          }
      }

    • The Abstract Handler:

      public abstract class Handler {
          private Handler nextHandler;
      
          Handler(final Handler nextHandler) {
              this.nextHandler = nextHandler;
          }
      
          public void handleRequest(final Request request) {
              doRequest(request);
      
              if (nextHandler != null) {
                  nextHandler.handleRequest(request);
              }
          }
      
          public abstract void doRequest(final Request request);
      }

    • The Concrete Handler:

      • Implementation 1:

        public class FirstHandler extends Handler {
            FirstHandler(final Handler nextHandler) {
                super(nextHandler);
            }
        
            public void doRequest(final Request request) {
                request.append("FirstHandler ...");
            }
        }

      • Implementation 2:

        public class SecondHandler extends Handler {
            SecondHandler(final Handler nextHandler) {
                super(nextHandler);
            }
        
            public void doRequest(final Request request) {
                request.append("SecondHandler ...");
            }
        }

    • A simple class to test the Chain of Responsibility design pattern:

      public class ChainOfResponsibilityPatternTest {
          public static void main(String[] args) {
              // create the request
              Request request = new Request();
      
              // create the handlers
              Handler secondHandler = new SecondHandler(null);
              Handler firstHandler = new FirstHandler(secondHandler);
      
              // handle the request
              firstHandler.handleRequest(request);
      
              System.out.println(request);
          }
      }

© 2025 mtitek