我在Delphi中发现了不同的观察者模式实现,如: Sourcemaking Design Patterns和Delphi Hobbyist。
一般来说,在Delphi中实现观察者的最佳方法是什么? 我会说使用接口因为代码更具可读性。
答案 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)