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

LaB*_*cca 6 delphi oop design-patterns

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

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

Jer*_*ers 7

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

例如,您可以使用泛型功能(自Delphi 2009以来可用)来简化许多模式的使用.

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

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

例如,TDataSet/TDataSource也实现了观察者模式.Data Aware Controls
的整个概念取决于它,所有这些都通过TDataLink绑定.

我已经编写了一个基于它的TDataLinkReflector组件TDataLink,它反映了TDataLink事件中的所有虚拟方法TDataLinkReflector.

基于TDataLinkReflector我写了TDataAwareControlController组件,它基于TDataSet,它的TFields和连接到TDataSet的TDataSource(只读,需要等着色)为Data Aware Controls做了各种有趣的事情.

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

另一个实现它的类是TApplicationEvents ; 每个实例都允许您监听TApplication上的任何事件.

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

--jeroen

PS:任何对我编写的组件感兴趣的人都可能希望看到这里提到CodeRage视频.