• JAVA


    参考例子:android的Button OnClickListener接口、《第一行代码》中的回调例子
     
    定义接口
    1. public interface HttpCallbackListener{
    2.     void onFinish(Stringresponse);
    3.     void onError(Exceptione);
    4. }
     
    调用接口
    1. publicclassHttpUtil{
    2.     publicstaticvoid sendHttpRequest( finalStringaddress,final HttpCallbackListener listener){
    3.         newThread(newRunnable(){
    4.             @Override
    5.             publicvoid run(){
    6.                 HttpURLConnection connection = null;
    7.                 try{
    8.                     URLurl= newURL(address);
    9.                     connection =(HttpURLConnection)url.openConnection();
    10.                     connection.setRequestMethod("GET");
    11.                     connection.setConnectTimeout(8000);
    12. connection.setReadTimeout(8000);
    13.                     connection.setDoInput(true);
    14.                     connection.setDoOutput(true);
    15.                     InputStreamin= connection.getInputStream();
    16.                     BufferedReaderreader= newBufferedReader(new InputStreamReader(in));
    17.                     StringBuilderresponse= newStringBuilder();
    18.                     String line;
    19.                     while((line = reader.readLine())!= null){
    20.                         response.append(line);
    21.                     }
    22.                     if(listener != null){
    23.                         //回调onFinish()方法
    24.                         listener.onFinish(response.toString());
    25.                     }
    26.                     }catch(Exceptione){
    27.                         if(listener != null){
    28.                             //回调onError()方法
    29.                             listener.onError(e);
    30.                         }
    31.                     }finally{
    32.                         if(connection != null){
    33.                             connection.disconnect();
    34.                         }
    35.             }
    36.         }
    37.     }).start();
    38. }
    39. }
     
    实现接口,参数传入
    1. HttpUtil.sendHttpRequest(address,newHttpCallbackListener(){
    2.     @Override
    3.     publicvoidonFinish(Stringresponse){
    4.     //在这里根据返回内容执行具体的逻辑
    5.     }
    6.     @Override
    7.     publicvoidonError(Exceptione){
    8.     //在这里对异常情况进行处理
    9.     }
    10. });
     
     

     
    回调机制适用情景:
    回调通常是在两个不同的线程间需要同步的情况下才出现的(见极客学院项目教程《智能聊天机器人》)
    多在框架开发中使用,回调的接口由具体的应用者自行设计与实现。
     

    在三层中,当业务层调用数据层时,是不需要把业务层自身传递到数据层的,并且这是一种上层调用下层的关系,比如我们在用框架的时候,一般直接调用框架提供 的API就可以了,但回调不同,当框架不能满足需求,我们想让框架来调用自己的类方法,怎么做呢?总不至于去修改框架吧。许多优秀的框架提几乎都供了相关 的接口,我们只需要实现相关接口,即可完成了注册,然后在合适的时候让框架来调用我们自己的类,还记不记得我们在使用Struts时,当我们编写 Action时,就需要继承Action类,然后实现execute()方法,在execute()方法中写咱们自己的业务逻辑代码,完成对用户请求的处 理。由此可以猜测,框架和容器中会提供大量的回调接口,以满足个性化的定制。

    即:为了使我们写的函数接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的子程序,增强程序灵活性,和反射有着异曲同工之妙。

     



  • 相关阅读:
    Vs 开发时无法断点问题
    VS启动调试速度异常的缓慢问题
    vs2017 调试时 浏览器关闭不想中断调试
    聚簇索引和非聚簇索引
    java实现阿里云短信服务发送验证码
    mysql定时器
    token,加密,签名
    Redis更新缓存同步数据库的理解
    Token
    解决哈希冲突的方法
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5532938.html
Copyright © 2020-2023  润新知