无论是发布消息,注册订阅方法等,都用到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及其接口方法即可。