Java 中回调机制的应用与理解

  
  
    回调使用场景:用一个统一的接口实现不同的功能的时候,这时候回调机制就会派上用场
    1、同步回调,即阻塞,单向。

    2、回调,即双向(类似自行车的两个齿轮)。

    3、异步调用,即通过异步消息进行通知
    比如这里模拟个场景:客户端发送msg给服务端,服务端处理后(5秒),回调给客户端,告知处理成功。代码如下:
    回调接口类:
    
    回调步骤:
    1.首先,定义一个接口”interface in”,其中有方法inFun;

    2.然后,定义类”class B implements in”,并实现接口in中的方法inFun,且有方法funB;

    3.接着,定义类”class A”,其中有方法funA,且funA的形参中有一个为接口in类型,该方法被B的方法funB调用,并在该方法中调用方法inFun,由于方法inFun在类B中实现,所以inFun即可以称为类B的回调函数;

    4.最后,由主函数来调用类B中的方法funB,即可以实现回调


    //定义一个回调接口,包含一个回调函数
    public interface CSCallBack {
  public void process(String status);
}

 模拟客户端:
 public class Client implements CSCallBack {
 
  private Server server;
 
  public Client(Server server) {
    this.server = server;
  }
 
  public void sendMsg(final String msg){
    System.out.println("客户端:发送的消息为:" + msg);
    new Thread(new Runnable() {
      @Override
      public void run() {
      //异步处理逻辑
        server.getClientMsg(Client.this,msg);
      }
    }).start();
    System.out.println("客户端:异步发送成功");
  }
 
  @Override
  public void process(String status) {
    System.out.println("客户端:服务端回调状态为:" + status);
  }
}

模拟服务端:
public class Server {
 
  public void getClientMsg(CSCallBack csCallBack , String msg) {
    System.out.println("服务端:服务端接收到客户端发送的消息为:" + msg);
 
    // 模拟服务端需要对数据处理
    try {
      Thread.sleep(5 * 1000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    System.out.println("服务端:数据处理成功,返回成功状态 200");
    String status = "200";
    csCallBack.process(status);
  }
}


测试类:
public class CallBackTest {
  public static void main(String[] args) {
    Server server = new Server();
    Client client = new Client(server);
 
    client.sendMsg("Server,Hello~");
  }
}

接口作为方法参数,其实际传入引用指向的是实现类。

1.回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
2.即调用方A不直接使用此函数function,而是通过调用被调用方B来间接调用function。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值