• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

DelphiEventBus入门

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

什么是Event Bus,可以百度一下这个关键词,了解一下。具体来说,好处有两点:

1.广播通信,当对象状态发生改变时,会自动通知已经订阅过的对象
2.发布者与订阅者耦合性降低,发布者只管发布一条消息出去,它不关心这条消息如何被订阅者使用

Delphi 现在有了开源项目,https://www.github.com/spinettaro/delphi-event-bus,目前已经发展到2.0版本,我在项目中使用感觉非常强大与稳定,支持跨平台。接下来,假设你已经下载并安装到Delphi IDE中,看看如何使用他。

2.0版本改动非常大,较1.x比,简直是脱胎换骨,用法更简洁,但功能更灵活,因为完全基于接口来实现的。

为了使用他,首先呢,我们要声明一个接口,然后再用一个类来实现这个接口:

现在声明一个接口IMemoChangeEvent

  IMemoChangeEvent = interface
  ['{DCFE64D2-9BA8-4949-9BB1-F5CD672E51A2}']
    procedure SetText(const Value: string);
    function GetText: String;
    property Text: string read GetText write SetText;
  end;

接着,用TMemoChangeEvent类来实现这个接口:

  TMemoChangeEvent = class(TInterfacedObject, IMemoChangeEvent)
  private
    FText: string;
    procedure SetText(const Value: string);
    function GetText: String;
  public
    property Text: string read GetText write SetText;
  end;

我们再声明一个函数,将TMemoChangeEvent实列用接口IMemoChangeEvent返回:

function GetMemoEvent: IMemoChangeEvent;
begin
  Result:= TMemoChangeEvent.Create;
end;

现在,我们可以将这个接口,通过Event Bus发布出去了,下面是发布的代码:

procedure TfrmMain.Memo1Change(Sender: TObject);
var
  LEvent: IMemoChangeEvent;
begin
  LEvent := GetMemoEvent;//取得接口
  LEvent.Text := Memo1.Lines.Text;//为接口赋值
  GlobalEventBus.Post(LEvent);//发布接口实例
end;

上面的代码中,GlobalEventBus是Delphi Event Bus提供的一个全局函数,返回IEventBus接口实例。

接下来,看看如何接收这个IMemoChangeEvent接口实例,看下面的代码,我们在接收对象中这样声明一个方法:

    [Subscribe]
    procedure OnMemoChange(AEvent: IMemoChangeEvent);

注意,这里用了注解[Subscribe],同时,接收方法只有一个参数AEvent,再看一下具体的实现:

procedure TfrmSecond.OnMemoChange(AEvent: IMemoChangeEvent);
begin
  MemoObserver.Lines.Text := AEvent.Text;
end;

这个AEvent参数就是前面发送的接口实例。

最后,为了能让接收对象接收消息,我们还要做一步,就是把接收对象注册到Event Bus中:

procedure TfrmSecond.FormCreate(Sender: TObject);
begin
   GlobalEventBus.RegisterSubscriberForEvents(Self);//一般情况下,我们都是在对象建立时注册
end;
procedure TfrmSecond.FormDestroy(Sender: TObject);
begin
   GlobalEventBus.UnregisterForEvents(Self);//取消注册
end;

现在,基于Delphi Event Bus的发布-订阅机制就完成了。

上文中用到的代码是开源代码中的例子VCLMessageing.dpr,你下载后就有了这个,可以基于上文,运行例子,感受Delphi Event Bus带给我们的便利!

如果上面内容对你有帮助,别忘记为我点赞或者关注,为我加点动力!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DelphiTryExcept实例发布时间:2022-07-18
下一篇:
[Delphi]ListView基本用法大全发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap