public interface RemoteOpenService { public JSON executeOpenService(JSON json, String method);}public class RemoteOpenServiceImpl implements RemoteOpenService{ @Override public JSON executeOpenService(JSON json, String method) { JSON returnJson = null; BaseService service = (BaseService) OpenServiceRouter.getRouterMap().get(method); returnJson = service.execute(json, ExampleRequest.class); return returnJson; } }
OpenServiceRouter:
public class OpenServiceRouter { private static Map<String, Object> routerMap; public static Map<String, Object> getRouterMap(){ if(routerMap != null){ return routerMap; } routerMap = new HashMap<String, Object>(); routerMap.put("example", "exampleService"); return routerMap; } }
模版方法設計:實際執行的時service的excute方法,而這個方法執行中把業務部分的實現留給子類實現。
public interface BaseService { public JSON execute(JSON json, Class c);}public abstract class AbstractBaseService implements BaseService{ // TODO public final Request decode(JSON json, Class c){ ObjectMapper mapper = new ObjectMapper(); Request request = null; try { request = mapper.readValue(json.toJSONString(), c); } catch (JsonParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return request; } // TODO public final JSON encode(Response response){ ObjectMapper mapper = new ObjectMapper(); // Convert object to JSON string JSON json = null; try { String j = mapper.writeValueAsString(response); json = JSON.parSEObject(j); } catch (JsonGenerationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return json; } /** * 子類不同實現具體邏輯 * @param request */ public abstract Response doService(Request request); /** * 模版執行方法 * @param json */ public final JSON execute(JSON json, Class c){ Request request = this.decode(json, c); Response response = doService(request); JSON retrunJson = this.encode(response); return retrunJson; }}
子類的實現:
public class ExampleServiceImpl extends AbstractBaseService{ @Override public Response doService(Request request) { ExampleRequest exampleRequest = (ExampleRequest)request; return null; }}
因為剛好需要設計一個這樣的被調用的組件,我就想好多地方會遇到這個場景,所以值得深入進來研究一下,以上是我想,不參考任何框架,以最原始的方式去實現一個這樣的請求路由。作為筆記的一部分,先開個頭,后續研究下其他框架對這個問題的設計。
新聞熱點
疑難解答