定义一个实现了Callback
抽象类的具体回调类,实现其中的doProcess()
方法来执行需要重试的逻辑。回调类的doProcess()
方法返回一个RetryResult
对象,表示重试的结果
public abstract class Callback{
public abstract RetryResult doProcess();
}
定义一个RetryResult
类,用于封装重试的结果
public class RetryResult{
private boolean isRetry;
private Object obj;
public static RetryResult ofResult(Boolean isRetry, Object obj){
return new RetryResult(isRetry, obj);
}
public static RetryResult ofResult(Boolean isRetry){
return new RetryResult(isRetry, null);
}
}
定义一个RetryExecutor
类,其中的execute()
方法接收一个重试次数和一个回调对象,根据重试次数循环执行回调对象的doProcess()
方法,直到达到最大重试次数或回调对象返回不需要重试的结果。
public class RetryExecutor {
public static Object execute(int retryCount, Callback callback) {
for (int curRetryCount = 0; curRetryCount < retryCount; curRetryCount++) {
RetryResult retryResult = callback.doProcess();
if (retryResult.isRetry()) {
continue;
}
return retryResult.getObj();
}
return null;
}
}
使用这个自定义的重试工具类时,只需要实现一个继承自Callback
的回调类,并在其中实现具体的重试逻辑。然后,通过调用RetryExecutor.execute()
方法来执行重试操作
//最大重试次数
int maxRetryCount = 3;
Object result = RetryExecutor.execute(maxRetryCount, new Callback() {
@Override
public RetryResult doProcess() {
// 执行需要重试的逻辑
// 如果需要重试,返回 RetryResult.ofResult(true)
// 如果不需要重试,返回 RetryResult.ofResult(false, result)
}
});