我試圖找到實現依賴於第三方庫類服務的一個很好的方式。如果圖書館不可用或無法提供答案,我還有一個「默認」實現作爲回退。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