• 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及其接口方法即可。

  • 相关阅读:
    bzoj1042 [ HAOI2008 ] --容斥原理+完全背包
    bzoj1079 [ SCOI2008 ] --记忆化搜索
    bzoj1584 [ Usaco2009 Mar ] --DP
    bzoj4724 [ POI2017 ] --数论
    bzoj3208--记忆化搜索
    bzoj3095--数学题
    resque 遍历加载job目录下的类
    php,js清除cookie
    nginx 设置 fastcgi缓存
    php缓冲区 sapi缓冲区
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/14548755.html
Copyright © 2020-2023  润新知