模板方法和接口参数的联合使用 [ 同一请求,不同处理方式 ]

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


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;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值