Не знаю, как это точно описать, но я думаю, что я изложил то, что хочу сделать, в название. Чтобы уточнить, я Я ищу шаблон проектирования, который позволил бы мне реализовать службу, которая в одной ситуации возвращала бы результат вызова синхронно, но в другом случае возвращала бы сведения о том, как выполнить вызов асинхронно (например, идентификатор задания).
Может быть, просто так определив проблему, станет ясно, что то, что я пытаюсь сделать, нарушает идею разработки контракта интерфейса. Могло пойти совсем не в том направлении.
Я думал, возможно, примерно так:
public class Data {
private int id;
/* getter/setter */
}
public class QueuedData extends Data {
private int jobId;
/* getter/setter */
}
public interface MyService {
public Data fetchData(int id);
}
public class SyncedMyService implements MyService {
private SyncDao syncDao;
public Data fetchData(int id) {
return syncDao.getData(id);
}
}
public class QueuedMyService implements MyService {
private JobQueue queue;
public QueuedData fetchData(int id) {
int jobId = queue.startGetData(id);
QueuedData queuedData = createQueuedDate(jobId);
return queuedData;
}
}
Разве это разумный способ решить эту задачу? Спасибо за любой совет. (вероятно, мне следует прочитать книгу по шаблонам проектирования)