Sto cercando di vedere se esiste un modello di progettazione in grado di risolvere il seguente problema. L'esempio è abbastanza specifico ma l'obiettivo è un'API pubblica + interna. Ho bisogno di informazioni specifiche per la mia biblioteca sottostante, ma voglio presentare l'API genericamente. Se la mia domanda è vaga o terribile, cercherò di farlo con i tuoi commenti.
Ad esempio, diciamo che sto creando un'API pubblica e voglio che sia agnostico all'implementazione. Continuando con l'esempio, sto creando un'API di gestione del lavoro che utilizza la libreria Quartz (può essere qualsiasi libreria) nell'attuale implementazione.
Voglio che le persone siano in grado di digitare:
Job job = jobManager.getJob("my.job.name");
String otherInformation = job.getOtherInformation();
job.setSchedule(new IntervalSchedule(repeatInterval, intervalUnit));
job.setSchedule(new CronSchedule(cronExpression));
L'API Quartz ha builder per le pianificazioni (utilizzate in Trigger):
CronScheduleBuilder.cronSchedule(cronExpression);
CalendarIntervalBuilder.calendarIntervalSchedule()
.withInterval(repeatInterval,
DateBuilder.IntervalUnit.DAY);
Nel mio esempio attuale avrei un'interfaccia di base o un programma di classe. Con questa struttura, come sarebbe possibile ottenere le informazioni specifiche di cui ho bisogno per i costruttori di programmi senza rivelare un oggetto specifico di implementazione nella mia interfaccia pur mantenendolo estendibile. Il mio obiettivo è impedire che le classi di implementazione filtrino nell'API pubblica. Se in futuro il quarzo cade in disgrazia, l'API pubblica non ha bisogno di cambiare e deprecare le classi specifiche del quarzo. Quale modello di progettazione o riorganizzazione del codice mi manca?