模板方法和接口参数的联合使用

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


[java]  view plain copy
  1. package com.umeng.dp.templatemethod;  
  2.   
  3. /** 
  4.  * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved 
  5.  * @Title: JdbcQueryTemplate.java 
  6.  * @Package com.umeng.dp.templatemethod 
  7.  * @Description: 这种设计可以用于网络请求中(以及类似场景),服务器返回的不同数据进行不同的处理,比如json的解析、XML解析等 
  8.  * @author Honghui He 
  9.  * @version V1.0 
  10.  */  
  11.   
  12. public class NetworkTemplate {  
  13.   
  14.     public <T> T httpRequrst(String url, HttpHandler<T> handler) {  
  15.         // 添加请求参数  
  16.         addParams();  
  17.         // 常规情况下返回的是ResultSet,这里模拟为String  
  18.         String result = doRequest(url);  
  19.         return handler.handle(result);  
  20.     }  
  21.   
  22.   
  23.     /** 
  24.      * @Title: getJdbcConnection 
  25.      * @Description: 获取jdbc连接 
  26.      * @throws 
  27.      */  
  28.     private void addParams() {  
  29.         System.out.println("参数1");  
  30.         System.out.println("参数2");  
  31.         System.out.println("参数3");  
  32.         System.out.println("参数4");  
  33.     }  
  34.   
  35.     /** 
  36.      * @Title: query 
  37.      * @Description: 假设返回的是符合条件的数据 
  38.      * @param sql 
  39.      * @return 
  40.      * @throws 
  41.      */  
  42.     private String doRequest(String url) {  
  43.         System.out.println("执行http请求,并且返回json数据");  
  44.         // 比如这里返回json数据(模拟), 则要有不同的Handler来处理这些不同的数据类型或者是XML解析  
  45.         return "王老五 : 12000;";  
  46.     }  
  47.   
  48.   
  49.     /** 
  50.      * @ClassName: QueryHandler 
  51.      * @Description: 
  52.      *      查询结果处理器 
  53.      *  
  54.      * @author Honghui He   
  55.      * @param <T>  处理以后的返回结果 
  56.      */  
  57.     public interface HttpHandler<T> {  
  58.         public T handle(String result);  
  59.     }  
  60. }  


测试代码 : 

[java]  view plain copy
  1. package com.umeng.dp.templatemethod;  
  2.   
  3. import com.umeng.dp.templatemethod.NetworkTemplate.HttpHandler;  
  4.   
  5. /** 
  6.  * @Copyright: Umeng.com, Ltd. Copyright 2011-2015, All rights reserved 
  7.  * @Title: Test.java 
  8.  * @Package com.umeng.dp.templatemethod 
  9.  * @Description: 
  10.  * @author Honghui He 
  11.  * @version V1.0 
  12.  */  
  13.   
  14. public class Test {  
  15.   
  16.     public static void main(String[] args) {  
  17.   
  18.         // JDBC例子, 使用范型了的QueryHandler避免子类膨胀  
  19.         NetworkTemplate http = new NetworkTemplate();  
  20.         // 查询存款超过10000的用户  
  21.         http.httpRequrst("select * form userdb where money > 10000"new HttpHandler<Void>() {  
  22.   
  23.             @Override  
  24.             public Void handle(String result) {  
  25.                 String[] data = result.split(":");  
  26.                 if (data.length > 0) {  
  27.                     System.out.println(data[0] + "有" + data[1]);  
  28.                 }  
  29.                 return null;  
  30.             }  
  31.   
  32.         });  
  33.     }  
  34.   
  35. }  


输出如下 : 

参数1
参数2
参数3
参数4
执行http请求,并且返回json数据
王老五 有 12000;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值