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