在开发中,我们经常要进行网络请求,并且对返回的数据进行处理。但是不同的请求返回的数据不同,因此对数据的处理也不同。如何如何设计解析数据的类型或者方法成了一个难点。下面使用模板方法和接口参数来演示一下 :
- 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;