在Delphi中实现观察者模式的最佳方法

时间:2010-10-28 08:36:20

标签: delphi oop design-patterns

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

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

2 个答案:

答案 0 :(得分:7)

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

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

如果您使用Pre Delphi-3版本,或者想要避免使用reference counting,则无法使用接口。
(当与传统的基于所有者/ Ownee的生命时间管理混合时,引用计数可以打开一个新的蠕虫;确保下载暴露来自正确祖先的接口的类 - 如TInterfacedObject - 并观察您的生命时间管理)。

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

例如,TDataSet / TDataSource也会实施observer pattern Data Aware Controls的整个概念取决于它,所有概念都通过TDataLink绑定。

我根据TDataLink编写了一个TDataLinkReflector组件,该组件将TDataLink中的所有虚拟方法反映到TDataLinkReflector中的事件。

基于TDataLinkReflector我写了TDataAwareControlController组件,它们基于TDataSet,其TFields和连接到TDataSet的TDataSource(以只读方式着色,为数据识别控件执行各种有趣的操作)。要求,等等。)

但是即使像事件这样看似简单的东西也可以看作基于该模式(虽然事件是单一的,所以只有一个观察者可以观看一个事件)。

另一个实现此目的的是TApplicationEvents;每个实例都允许您收听TApplication上的任何事件。

我希望能够阐明Delphi中使用观察者模式的位置。

- 的Jeroen

PS:对我写的组件感兴趣的人可能希望看到CodeRage video mentioned here

答案 1 :(得分:2)