Java 回退模式
2022-09-04 22:06:29
我试图找到一种实现依赖于第三方库类的服务的好方法。我还有一个“默认”实现,用于在库不可用或无法提供答案的情况下的回退。
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和默认机制几乎相同。此外,如果在服务中添加另一个方法,则实现看起来几乎相同。