Разработка интерфейса службы для синхронной и асинхронной реализации

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

Может быть, просто так определив проблему, станет ясно, что то, что я пытаюсь сделать, нарушает идею разработки контракта интерфейса. Могло пойти совсем не в том направлении.

Я думал, возможно, примерно так:

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;
  }
}

Разве это разумный способ решить эту задачу? Спасибо за любой совет. (вероятно, мне следует прочитать книгу по шаблонам проектирования)

1
задан Nick Spacek 29 September 2010 в 18:08
поделиться