红鱼儿

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

 

posted on 2021-03-17 13:01  红鱼儿  阅读(445)  评论(0编辑  收藏  举报