zoukankan      html  css  js  c++  java
  • Java回调实例

    通过代码来展示回调机制

    回调:简单来说就是A调用B,B在执行完某些操作后自动调用A的方法;回调机制也体现了面向接口编程的好处。

    这里可能涉及到几个概念:同步、异步、回调

    同步:是一种阻塞的方式,A调用B,必须等待B处理完成后才能进行往下经行;

    异步:是一种并行的方式,A调用B,不必等待B而继续处理A自己的事情;

    回调:算是异步的一种,A调用B,A继续接着处理自己的逻辑,A必须实现一个接口,B处理完后再把结果通知给A;

    step1: 首先定义一个回调接口;

    1 public interface CSCallBack {
    2 
    3     public void process(String status);
    4 }

    step2: 定义服务器类

     1 /*
     2  * step2 : 定义服务器类,处理客户端传来的数据
     3  */
     4 public class Server {
     5     //定义一个方法用来接受客户端的消息并通过回调方法告诉客户端已经收到消息;
     6     public void getClientMsg(CSCallBack callback,String msg){
     7         System.out.println("服务端:服务端接收到客户端消息:"+msg);
     8         
     9         try {
    10             Thread.sleep(5*1000); //模拟耗时处理逻辑
    11         } catch (InterruptedException e) {
    12             // TODO Auto-generated catch block
    13             e.printStackTrace();
    14         }
    15         
    16         System.out.println("服务端:服务端数据处理成功,返回状态:001");
    17         String status = "001";
    18         callback.process(status);
    19     }
    20 }

    step3: 定义客户端,并实现CSCallBack接口,并把服务端Service类组合到客户端类里面;

     1 /*
     2  * step3: 定义客户端,异步向服务器发送消息
     3  */
     4 public class Client implements CSCallBack{
     5     private Server server ; //组合服务端类
     6     
     7     public Client(Server server){
     8         this.server = server;
     9     }
    10     
    11     public void sendMsg(final String msg){
    12         System.out.println("客户端:客户端向服务端发送消息:"+msg);
    13         
    14         new Thread(new Runnable(){
    15 
    16             @Override
    17             public void run() {
    18                 // 为了让Service实现回调,需要把本类的引用传给Service,然后实现在Service调用Client的方法,也就是传说中的回调  
    19                 server.getClientMsg(Client.this, msg); //因为要被内部类一个新的线程可以使用,所以msg必须是final
    20             }
    21             
    22         }).start();
    23         System.out.println("客户端:客户端异步消息发送成功。");
    24     }
    25 
    26     @Override
    27     public void process(String status) {
    28         // TODO Auto-generated method stub
    29         System.out.println("客户端:收到服务端的回调状态为:"+status);
    30     }
    31     
    32 }

    step4: 编写测试类

     1 public class CallBackDemo {
     2 
     3     /**
     4      * @param args
     5      */
     6     public static void main(String[] args) {
     7         // TODO Auto-generated method stub
     8         Server server = new Server();
     9         Client client = new Client(server);
    10         client.sendMsg("Hello, Server...");
    11     }
    12 
    13 }
  • 相关阅读:
    Cocos游戏引擎,让小保安成就大梦想
    Android 高仿QQ5.2双向側滑菜单DrawerLayout实现源代码
    Java中字符串相等与大小比較
    Android四大基本组件之 Activity
    C++基础学习教程(五)
    HAWQ技术解析(八) —— 大表分区
    Jenkins 安装与使用--实例
    Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能
    Mycat(4):消息表mysql数据库分表实践
    谋哥:《App自推广》开篇之回到远古人类
  • 原文地址:https://www.cnblogs.com/crazytrip/p/6640394.html
Copyright © 2011-2022 走看看