我试图找到实现依赖于第三方库类服务的一个很好的方式。如果图书馆不可用或无法提供答案,我还有一个“默认”实现作为回退。Java的后备模式
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