Я пытаюсь найти хороший способ реализации службы, которая опирается на сторонний класс библиотеки. У меня также есть реализация по умолчанию, используемая в качестве резервной копии, если библиотека недоступна или не может предоставить ответ.Java fallback pattern
public interface Service {
public Object compute1();
public Object compute2();
}
public class DefaultService implements Service {
@Override
public Object compute1() {
// ...
}
@Override
public Object compute2() {
// ...
}
}
Фактическая реализация сервиса будет что-то вроде:
public class ServiceImpl implements Service {
Service defaultService = new DefaultService();
ThirdPartyService thirdPartyService = new ThirdPartyService();
@Override
public Object compute1() {
try {
Object obj = thirdPartyService.customCompute1();
return obj != null ? obj : defaultService.compute1();
}
catch (Exception e) {
return defaultService.compute1();
}
}
@Override
public Object compute2() {
try {
Object obj = thirdPartyService.customCompute2();
return obj != null ? obj : defaultService.compute2();
}
catch (Exception e) {
return defaultService.compute2();
}
}
}
Текущая реализация кажется дублировать вещи немного в пути, что только реальные вызовы на услуги разные, но try/catch, а механизм по умолчанию - почти то же самое. Кроме того, если в сервисе был добавлен другой метод, реализация будет выглядеть почти одинаково.
Есть ли шаблон дизайна, который может применяться здесь (proxy, strategy), чтобы код выглядел лучше и делал дальнейшее добавление меньше копий-пасты?
Что версию Java вы используете? – Radiodef