• 异步回调方式的讨论


    很多时候需要异步操作来避免阻塞当前线程,而异步操作的结果需要通过回调告知调用者,而回调的方式有多种,且不同语言支持的情况也不一样。

    回调机制是在某个时间发生前准备好的一段代码,事件一旦发生,系就会执行相应的代码。因此回调有两个主要部分组成:(1)注册过程 (2)事件发生时需要执行的代码。

    实现回调机制的途径有一下几大类:

    1.注册对象和回调方法

       (1)目标-动作对:异步调用时,简单保存目标对象指针和其回调处理方法的指针,当异步操作结束后,被调用对象会通过二者找到回调的入口,并执行回调。

       (2) 委托机制:只需要保存目标对象的指针,而目标对象肯定实现了回调协议,即其回调处理方法是唯一的,明确的,因此仅通过目标对象,就能找到回调接口。当某个对象收到多个事件并要求同一个对象来处理所有的事件时,就可以使用委托机制了。

           (3)通告机制:类似于设计模式中的观察者模式(订阅者-发布者模式),多个监听对象中,每个对象都有一个回调入口(目标-动作对),他们监听的同一个异步事件,当异步完成时,它们会被一一回调。当需要多个对象(或者两个无关的对象)处理同一事件时,可以使用通告机制。

    2.继承回调类

      我们可以创建类A继承一个回调类(接口),并实现指定的回调方法,那么类A的对象就可以作为回调对象,这样在异步调用的时候不用注册对象和方法,而是直接传入一个回调对象即可。这种方式虽然在注册过程中方便,但是在准备回调代码时麻烦,因为不同类型的回调都要创建一个新类,导致代码膨胀。

    3.注册时实现回调

           此方式只是在使用回调的方式与其他几种不同,即允许你在调用异步接口的同时编写回调处理代码,即整合了回调的注册过程和准备回调代码的过程。这种方式适合处理简单快速的回调任务,帮助开发者写出短小精炼的代码。已知Object-C中的Block机制和Java中回调机制支持此方式。

  • 相关阅读:
    Elasticsearch (二) 索引
    Elasticsearch (一)搭建与启动
    IDEA 插件
    IDEA 导入华丽的皮肤
    Tomcat https 访问
    oracle系统视图SQL语句整理
    Java内存优化和性能优化的几点建议
    Tomcat配置SSL证书
    sublime集成MinGW,打造C/C++开发环境
    一个简单的Vue.js组件开发示例
  • 原文地址:https://www.cnblogs.com/guoxiaoqian/p/4338861.html
Copyright © 2020-2023  润新知