Шаблон проектирования для обработки асинхронного ответа в Java

Я читал ответы на аналогичные вопросы и ответы

Как создать асинхронный HTTP-запрос в JAVA? | Шаблон проектирования асинхронного программирования |
AsyncTask Android - Шаблон проектирования и возвращаемые значения

Я вижу много решений, но ни одно из них меня не удовлетворяет.

Способ слушателя

Как только результаты будут поймано, обработка реализована в методе onResult.

public interface GeolocationListener {
public void onResult(Address[] addresses);
public void onError(Exception e);
}

Это решение меня не совсем удовлетворяет, потому что я хочу обрабатывать результаты в основном методе. Я ненавижу этот интерфейс, потому что, когда ответ возвращается, он обрабатывается в onResult, что приводит к цепочкам обработки и невозможности вернуться к "основному" методу.

Способ сервлета

public class SignGuestbookServlet extends HttpServlet {

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
        // ...
        resp.sendRedirect("/guestbook.jsp");
    }
}

Нет открытого вызова кода Java сервлет. Вся конфигурация выполняется в файле web.xml

Как я хочу

Ждать такого ответа

Response a = getResponse();
// wait until the response is received, do not go further
// process
Response b = getResponse();
// wait until the response is received, do not go further
process(a,b);

Есть ли шаблон проектирования для обработки асинхронного запроса и ждать ответа, как указано выше? Другой способ, кроме слушателя. Пожалуйста, без библиотеки или фреймворка.

ИЗМЕНИТЬ Спасибо пока за ответы. Я не дал вам полной картины, поэтому открыл класс геолокации Я приступил к реализации. Я не знаю, как реализовать метод. Может кто-нибудь покажет "как"? Он (или она) также должен реализовать прослушиватель для получения результатов

private Address getFullAddress (String text, AddressListener listener, ... ){

    // new Geolocation(text, listener, options).start() 
    // implements Geolocation.GeolocationListener   
    // how to return the Address from the onResult ?
}

17
задан Community 23 May 2017 в 12:18
поделиться