【问题标题】:Best way to implement observer pattern in Delphi在 Delphi 中实现观察者模式的最佳方法
【发布时间】:2010-10-28 08:36:20
【问题描述】:

我在 Delphi 中发现了观察者模式的不同实现,例如: Sourcemaking Design PatternsDelphi Hobbyist

一般来说,在 Delphi 中实现观察者的最佳方式是什么?
我会说使用接口,因为代码更具可读性。

【问题讨论】:

标签: delphi oop design-patterns


【解决方案1】:

没有“好”或“最好”的方式来实现模式。
您选择的实现取决于您希望如何使用它。

例如,您还可以使用泛型功能(自 Delphi 2009 起提供)来简化大量模式的使用。

如果你使用 Pre Delphi-3 版本,或者想避免使用reference counting,你就不能使用接口。
(当与传统的基于 Owner/Ownee 的生命周期管理混合时,引用计数可能会打开一个新的漏洞;一定要继承暴露来自正确祖先的接口的类 - 例如TInterfacedObject - 并注意你的生命周期管理)。

除了关于如何实现观察者模式的“纯”问题之外,能够在 Delphi 中识别实现观察者模式的类也是一件好事。

例如TDataSet/TDataSource 也实现了observer pattern
Data Aware Controls 的整个概念都依赖于它,都通过TDataLink 绑定。

我在TDataLink的基础上写了一个TDataLinkReflector组件,将TDataLink中的所有虚方法都反映到TDataLinkReflector中的事件上。

基于 TDataLinkReflector 我编写了 TDataAwareControlController 组件,这些组件基于 TDataSet、它的 TField 和链接到 TDataSet 的 TDataSource 对数据感知控件执行各种有趣的事情(在只读、必需等上着色) .

但即使是像事件这样看似简单的事情也可以被视为基于该模式(尽管事件是单次转换的,因此只有一个观察者可以观看一个事件)。

另一个实现这个的类是TApplicationEvents;每个实例都可以让您监听 TApplication 上的任何事件。

我希望对 Delphi 中使用观察者模式的地方有所了解。

--杰罗恩

PS:任何对我编写的组件感兴趣的人可能想查看CodeRage video mentioned here

【讨论】:

    【解决方案2】:

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2011-12-21
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多