【问题标题】:Is there an equivalent in Delphi for the Java listeners principle?Delphi 中是否有 Java 监听器原理的等价物?
【发布时间】:2011-08-29 17:34:47
【问题描述】:

我只是对这个很好奇。我知道在 Delphi 中定义事件的两种方法,使用回调原理和 windows 消息原理。

但是,消息原理不是面向对象的,回调只适用于一个实例。

我想要一个很好的解决方案来处理一个事件,其中两个不同的对象可以在事件触发后执行一个操作。

在 Java 中,我可以简单地添加另一个侦听器。

有没有人知道 Delphi 中有任何等效的方法来实现这个漂亮的侦听器原则?

【问题讨论】:

  • Delphi FMX(也可以考虑 VCL)似乎有(可能主要用于内部使用)这样的“事件”来允许监控组件的生命周期。可能对设计容器有用

标签: java delphi events


【解决方案1】:

这些也称为多播事件,Allen Bauer 写了一篇不错的文章,标题为 Multicast events using generics,很好地涵盖了该主题。

简而言之,多播事件不像 Java C# 那样被嵌入到语言/框架中,但可以通过一些额外的工作来模拟。泛型的引入使这变得更加简单。

【讨论】:

  • 谢谢,多播事件是 Delphi 中的术语。太糟糕了,它没有包含在语言/IDE中。
  • 看看TApplicationEvents 组件。它使用多播事件,而不使用泛型。
【解决方案2】:

SO 上已经有 a similar discussion 以及一些指向现有多播实现的附加链接。

【讨论】:

    【解决方案3】:

    实际上,这是一种称为观察者或侦听器 (http://c2.com/cgi/wiki?ObserverPattern) 的设计模式。我想您可以编写对象的实现,这样您就可以注册一个观察者列表,这些观察者可以在您的代码发生任何变化时得到通知。

    【讨论】:

    • 当然可以,但是最好使用本地语言支持的标准解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多