gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:59:04 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

如果您使用 Delphi-3 之前的版本,或者想要避免引用计数,则不能使用接口(interface)。
(当与传统的基于Owner/Ownee的生命周期管理混合时,引用计数可能会带来新的麻烦;一定要继承那些暴露来自正确祖先的接口(interface)的类——比如TInterfacedObject——并注意你的生命周期管理)。 p>

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

例如TDataSet/TDataSource还实现 observer pattern .
整体概念Data Aware Controls就靠它了,全部通过TDataLink绑定(bind).

我写了一个TDataLinkReflector基于TDataLink的组件,它将TDataLink中的所有虚拟方法反射(reflect)到TDataLinkReflector中的事件。

基于我写的TDataLinkReflectorTDataAwareControlController这些组件根据 TDataSet、其 TField 和链接到 TDataSet 的 TDataSource 对数据感知控件执行各种有趣的操作(只读、必需的着色等)。

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

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

我希望这能让大家了解观察者模式在 Delphi 中的使用情况。

--杰罗恩

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

关于delphi - 在Delphi中实现观察者模式的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com