zoukankan      html  css  js  c++  java
  • Delphi Event Bus进阶(二)GlobalEventBus是怎么来的?

    无论是发布消息,注册订阅方法等,都用到GlobalEventBus这个全局接口对象。接下来我们看看他是怎么来的?

    function GlobalEventBus: IEventBus;
    begin
      Result := TEventBusFactory.GlobalEventBus;
    end;

    原来,GlobalEventBus是一个函数,返回IEventBus接口,看上面的代码,函数内部是调用TEventBusFactory类的GlobalEventBus类方法,返回IEventBus接口。

    接下来,就去看看TEventBusFactory是什么样的,下面是源码中TEventBusFactory的声明:

      TEventBusFactory = class
      strict private//这一部分声明的内容只能在这个类中访问
        class var FGlobalEventBus: IEventBus;//声明类变量
        class constructor Create;//声明类构造函数
      public
        function CreateEventBus: IEventBus;
        class property GlobalEventBus: IEventBus read FGlobalEventBus;//声明类属性
      end;

    strict private:在这一部分声明的内容,只能在当前类中访问。具体可以参考:Delphi XE中类成员的访问权限(新增了strict private和strict protected,还有automated)

    class var FGlobalEventBus:声明类变量FGlobalEventBus,即不用建立类实例,也能够使用的变量

    class constructor Create:声明为类构造函数,这个方法会在项目启动时自动调用,不用开发者显示的调用。具体可以参考:Delphi2010新发现-类的构造和析构函数功能

    class constructor Create的实现中,会看到建立了FGlobalEventBus接口对象:

    class constructor TEventBusFactory.Create;
    begin
      FGlobalEventBus := TEventBus.Create;
    end;

    再看class property GlobalEventBus,直接返回的FGlobalEventBus!

    写到这里,我想你也清楚GlobalEventBus是怎么来的了。对于Delphi Event Bus的使用者来,其实不了解上面的机制也无所谓,只要知道使用GlobalEventBus及其接口方法即可。

  • 相关阅读:
    Go笔记
    EFCore CodeFirst操作MySQL
    基于NET Core简单操作Kafka
    NETCore2.2/3.0+使用带有权限验证的Swagger
    Net操作RabbitMQ
    Mysql报错问题汇总
    GDSM自动化部署shell脚本
    NET操作Redis
    ViewState原理
    使用jsonp跨域请求
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14548755.html
Copyright © 2011-2022 走看看