Ich versuche eine gute Möglichkeit zu finden, einen Dienst zu implementieren, der auf einer Bibliotheksklasse von Drittanbietern beruht. Ich habe auch eine "Standard" -Implementierung, um als Fallback zu verwenden, falls die Bibliothek nicht verfügbar ist oder keine Antwort geben kann.Java-Fallback-Muster
public interface Service {
public Object compute1();
public Object compute2();
}
public class DefaultService implements Service {
@Override
public Object compute1() {
// ...
}
@Override
public Object compute2() {
// ...
}
}
Die tatsächliche Implementierung des Dienstes wäre so etwas wie:
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();
}
}
}
Die aktuelle Implementierung der Dinge ein wenig in der Art und Weise zu kopieren scheint, dass nur die tatsächlichen Anrufe auf die Dienste unterschiedlich sind, aber die try/catch und der Standardmechanismus sind ziemlich gleich. Wenn eine andere Methode im Service hinzugefügt wurde, würde die Implementierung ähnlich aussehen.
Gibt es ein Entwurfsmuster, das hier angewendet werden könnte (proxy, strategy), um den Code besser aussehen zu lassen und weitere Zusätze weniger Copy-Paste zu machen?
Was Java-Version verwenden Sie? – Radiodef