¿Patrón de Java para devoluciones de llamada anidadas?

Estoy buscando un patrón de Java para hacer una secuencia anidada de llamadas a métodos no bloqueantes. En mi caso, algunos códigos de cliente deben invocar de forma asíncrona un servicio para realizar algún caso de uso, y cada paso de ese caso de uso debe realizarse de forma asíncrona (por razones fuera del alcance de esta pregunta). Imagina que tengo interfaces existentes de la siguiente manera:

public interface Request {} 

public interface Response {} 

public interface Callback<R extends Response> {
    void onSuccess(R response);
    void onError(Exception e);
}

Hay varias implementaciones pareadas de laRequest yResponse interfaces, a saberRequestA + ResponseA (dado por el cliente),RequestB + ResponseB (utilizado internamente por el servicio), etc.

El flujo de procesamiento se ve así:

Entre la recepción de cada respuesta y el envío de la siguiente solicitud, es necesario que ocurra algún procesamiento adicional (por ejemplo, basado en los valores de cualquiera de las solicitudes o respuestas anteriores).

Hasta ahora he intentado dos enfoques para codificar esto en Java:

Clases anónimas: se ponen feas rápidamente debido a la anidación requerida.Clases internas: más ordenadas que las anteriores, pero aún así es difícil para otro desarrollador comprender el flujo de ejecución

¿Hay algún patrón para hacer este código más legible? Por ejemplo, ¿podría expresar el método de servicio como una lista de operaciones autocontenidas que se ejecutan en secuencia por alguna clase marco que se encarga del anidamiento?

Respuestas a la pregunta(4)

Su respuesta a la pregunta