Ответ
Паттерн Chain of Responsibility позволяет передавать запросы по цепочке обработчиков, пока один из них не обработает запрос. Это помогает избежать жесткой привязки отправителя запроса к получателю и дает возможность динамически менять цепочку обработчиков.
Пример:
abstract class Handler {
private Handler next;
public Handler setNext(Handler next) {
this.next = next;
return next;
}
public abstract void handle(Request request);
protected void passToNext(Request request) {
if (next != null) next.handle(request);
}
}
class AuthHandler extends Handler {
public void handle(Request request) {
if (request.isAuthenticated()) passToNext(request);
else throw new RuntimeException("Not authenticated");
}
}
class LoggingHandler extends Handler {
public void handle(Request request) {
System.out.println("Logging request");
passToNext(request);
}
}
Используется в:
- Middleware в веб-фреймворках
- Обработке событий
- Валидации данных
- Логировании