Próbuję znaleźć dobry sposób na wdrożenie usługi, która opiera się na klasie biblioteki innej firmy. Mam również "domyślną" implementację, która może być użyta jako element zapasowy w przypadku, gdy biblioteka jest niedostępna lub nie może udzielić odpowiedzi.Wzór awaryjny Java
public interface Service {
public Object compute1();
public Object compute2();
}
public class DefaultService implements Service {
@Override
public Object compute1() {
// ...
}
@Override
public Object compute2() {
// ...
}
}
Faktyczna realizacja usługi będzie coś takiego:
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();
}
}
}
Obecna implementacja zdaje się powielać rzeczy trochę w ten sposób, że jedynie rzeczywiste połączenia z usługami są różne, ale try/catch i domyślny mechanizm są prawie takie same. Ponadto, jeśli dodano inną metodę w usłudze, implementacja wyglądałaby prawie identycznie.
Czy istnieje wzór, który może mieć tutaj zastosowanie (proxy, strategy), aby kod wyglądał lepiej i tworzyć dalsze dodatki, pomniejszając kopiowanie i wklejanie?
Co wersja Java jest używana? – Radiodef