Professor poderia dar um exempolo de uso do padrão chain of responsibility com a ajuda do framework Spring Boot?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Professor poderia dar um exempolo de uso do padrão chain of responsibility com a ajuda do framework Spring Boot?
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!