Professor poderia dar um exempolo de uso do padrão chain of responsibility com a ajuda do framework Spring Boot?
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!