1
resposta

Como seria essa abordagem com a ajuda do Spring?

Professor poderia dar um exempolo de uso do padrão chain of responsibility com a ajuda do framework Spring Boot?

1 resposta

Olá Jonas, tudo bem?

O padrão Chain of Responsibility é muito útil para criar uma cadeia de objetos que podem tratar uma requisição de forma sequencial. Para implementar esse padrão com o Spring Boot, podemos utilizar a injeção de dependência e a anotação @Autowired. Podemos criar uma classe abstrata que representa um handler e, em seguida, criar outras classes concretas que herdam dessa classe abstrata e implementam o método handleRequest().

Em seguida, podemos criar uma classe que representa a cadeia de handlers e, usando a anotação @Autowired, injetar todos os handlers nessa classe.

Assim, quando uma requisição chegar, ela será passada pela cadeia de handlers até que um deles a trate ou até que chegue ao final da cadeia sem ter sido tratada por nenhum dos handlers.

Segue abaixo um exemplo de como seria a implementação do padrão Chain of Responsibility com o Spring Boot:

@Component
public abstract class Handler {
    protected Handler nextHandler;

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

    public abstract void handleRequest(Request request);
}

@Component
public class ConcreteHandler1 extends Handler {
    @Override
    public void handleRequest(Request request) {
        if (request.getTipo().equals("tipo1")) {
            // trata a requisição
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

@Component
public class ConcreteHandler2 extends Handler {
    @Override
    public void handleRequest(Request request) {
        if (request.getTipo().equals("tipo2")) {
            // trata a requisição
        } else if (nextHandler != null) {
            nextHandler.handleRequest(request);
        }
    }
}

@Component
public class Chain {
    @Autowired
    private ConcreteHandler1 handler1;

    @Autowired
    private ConcreteHandler2 handler2;

    public Chain() {
        handler1.setNextHandler(handler2);
    }

    public void handleRequest(Request request) {
        handler1.handleRequest(request);
    }
}

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software