The Callback Mechanism

CAA V5的回调机制采用发布/订阅模式,通过CATBaseUnknown或CATEventSubscriber基类实现。对象作为发布者发布事件,回调管理员维护通知列表确保事件送达订阅者。对象可以以CATBaseUnknown为基类,通过全局函数订阅或发布事件,或者实现CATEventSubscriber基类的订阅和发布功能。报警器和强盗的例子展示了发布者与订阅者的概念,报警器(发布者)触发AlarmRinging事件,强盗(订阅者)被动接收事件。
摘要由CSDN通过智能技术生成

简介

CAA V5的对象间的回调机制是通过发布/订阅的方式实现的。比如有两个对象:A和B,其中A作为时间的发布者,B作为事件的订阅者,当事件发生的时候,A对象会通知B对象。事件的订阅者和发布者的基类是CATBaseUnknown或者CATEventSubscriber。对于一些特定的事件存在也存在着消息的回调,比如主程序由于空闲而退出,等待时间超时,更改文件的描述符等。

什么是回调机制

回调机制是通过发布/订阅的方式来实现的,可以对比一下日常生活中的例子。
比如,如果有新的新闻报道时,报社需要将这些信息发布出去,使得所有的读者都能读到。这些读者可以分为两类:每天自己买报纸的;还有订阅报社的报纸,每天报社负责送货上门的。对于订阅报纸的,报社需要有专门的邮递员,将报纸送到订阅者的家里。邮递员需要维护订阅者的名单信息,同时会增加订阅者和取消订阅者。
回调机制与报社的机制很相似。一个对象会通过通知的方式发布事件,回调管理员会维护这些通知,并保证通知送达到订阅者对象。订阅者会订阅一个对象的指定通知,当该通知发出时,订阅者能够被通知。

如何使得一个对象变为订阅者或者发布者

有两种方式可以使得一个对象变为发布者或者订阅者

  1. 最常用的方式是对象以CATBaseUnknown为基类,通过全局的函数让订阅者订阅指定的事件,让发布者发布指定的通知。这种事最常用也是推荐的方式。
  2. 另外的一种方式是对象以CATEventSubscriber作为基类,通过实现订阅或者发布函数,来实现回调。

以CATBaseUnknown作为基类

这种方式是最常用的一种方式。为了说明过程,可以列举一下生活中的例子。假如你的公寓有报警器保护,如果你不在家的时候,有强盗强行闯入的话,报警器就会报警。通常报警器想起后,强盗就会收到惊吓,从而逃走。当然,如果强盗如果能够关闭报警器,那就是另外的故事了。
在这个场景下存在着事件的订阅者和发布者,发布者为报警器,订阅者为强盗。在整个过程中,报警器通过报警来发出生硬,表明自己被激发;而强盗虽热没有明显的订阅过程,但是他有耳朵,会自然地听到声音。而在程序的世界里,对象是没有耳朵的,只能人为的指定对象去订阅哪些事件。各个对象之间的关系如下
在这里插入图片描述

  1. 首先创建时间的发布者:报警器。它以CATBaseUnknown为基类,存在一个方法BeginRinging

    #include "CATBaseUnknown.h"
    class ApartmentAlarm : public CATBaseUnknown
    {
      CATDeclareClass;
      public:
        ApartmentAlarm();
        virtual ~ApartmentAlarm();
        void BeginRinging();
    };
    
  2. 创建发出的通知类:AlarmRinging。 该类以CATNotification作为基类,在头文件中仅包含CATDeclareClass

    #include "CATNotification.h"
    class AlarmRinging : public CATNotification
    {
      CATDeclareClass;
    };
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值