模板方法和介面引數的聯合使用 [ 同一請求,不同處理方式 ]
阿新 • • 發佈:2019-02-14
在開發中,我們經常要進行網路請求,並且對返回的資料進行處理。但是不同的請求返回的資料不同,因此對資料的處理也不同。如何如何設計解析資料的型別或者方法成了一個難點。下面使用模板方法和介面引數來演示一下 :
package com.umeng.dp.templatemethod; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * @Title: JdbcQueryTemplate.java * @Package com.umeng.dp.templatemethod * @Description: 這種設計可以用於網路請求中(以及類似場景),伺服器返回的不同資料進行不同的處理,比如json的解析、XML解析等 * @author Honghui He * @version V1.0 */ public class NetworkTemplate { public <T> T httpRequrst(String url, HttpHandler<T> handler) { // 新增請求引數 addParams(); // 常規情況下返回的是ResultSet,這裡模擬為String String result = doRequest(url); return handler.handle(result); } /** * @Title: getJdbcConnection * @Description: 獲取jdbc連線 * @throws */ private void addParams() { System.out.println("引數1"); System.out.println("引數2"); System.out.println("引數3"); System.out.println("引數4"); } /** * @Title: query * @Description: 假設返回的是符合條件的資料 * @param sql * @return * @throws */ private String doRequest(String url) { System.out.println("執行http請求,並且返回json資料"); // 比如這裡返回json資料(模擬), 則要有不同的Handler來處理這些不同的資料型別或者是XML解析 return "王老五 : 12000;"; } /** * @ClassName: QueryHandler * @Description: * 查詢結果處理器 * * @author Honghui He * @param <T> 處理以後的返回結果 */ public interface HttpHandler<T> { public T handle(String result); } }
測試程式碼 :
輸出如下 :package com.umeng.dp.templatemethod; import com.umeng.dp.templatemethod.NetworkTemplate.HttpHandler; /** * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved * @Title: Test.java * @Package com.umeng.dp.templatemethod * @Description: * @author Honghui He * @version V1.0 */ public class Test { public static void main(String[] args) { // JDBC例子, 使用範型了的QueryHandler避免子類膨脹 NetworkTemplate http = new NetworkTemplate(); // 查詢存款超過10000的使用者 http.httpRequrst("select * form userdb where money > 10000", new HttpHandler<Void>() { @Override public Void handle(String result) { String[] data = result.split(":"); if (data.length > 0) { System.out.println(data[0] + "有" + data[1]); } return null; } }); } }
引數1
引數2
引數3
引數4
執行http請求,並且返回json資料
王老五 有 12000;