簡單摘要 一個簡單的執行者Executor
阿新 • • 發佈:2019-01-09
1 建立一個介面 使用泛型規範輸入輸出<T,E>
public interface TestExecutor<T, E> { T execute(String url, E params) throws Exception; } //對應的實現 public class SimpleTestExecutor implements TestExecutor<Boolean,String>{ @Override public Boolean execute(String url, String params) throws Exception { System.out.println("url>>>" + url); System.out.println("params>>>" + params); // throw new NullPointerException("報錯了!"); return true; } }
2 建立一個介面服務Service 呼叫
public interface TestService { <T, E> T execute(TestExecutor<T, E> executor, String url, E params) throws Exception; } //對應的實現 public class TestSeviceImpl implements TestService { @Override public <T, E> T execute(TestExecutor<T, E> executor, String url, E params) throws NullPointerException { int retryTime = 0; do { try { System.out.println("進行第"+ (retryTime + 1) +"次嘗試"); return this.executeInternal(executor, url, params); } catch (Exception e) { if (retryTime + 1 > 5) { throw new RuntimeException("請求超出最大次數!"); } try { Thread.sleep(1000); } catch (InterruptedException e1) { e1.printStackTrace(); } } } while (retryTime++ < 5); throw new RuntimeException("請求超出最大次數!"); } private <T, E> T executeInternal(TestExecutor<T, E> executor, String url, E params) throws Exception { T t = null; try { t = executor.execute(url, params); } catch (Exception e) { throw e; } return t; } }
3 main入口
public class Main {
public static void main(String[] args) throws Exception {
TestService service = new TestSeviceImpl();
boolean result = service.execute(new SimpleTestExecutor(),"www.163.com","hello");
System.out.print("result >>" +result);
}
}
完畢!一個簡單的執行器