代码之家  ›  专栏  ›  技术社区  ›  UnDiUdin

在Delphi中实现观测器模式的最佳方法

  •  6
  • UnDiUdin  · 技术社区  · 14 年前

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

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

    2 回复  |  直到 8 年前
        1
  •  7
  •   Jeroen Wiert Pluimers    14 年前

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

    例如,您还可以使用泛型特性(从Delphi2009年开始提供)来简化许多模式的使用。

    如果你使用Delphi-3之前的版本,或者想避免 reference counting 不能使用接口。
    (引用计数可以在与传统的基于所有者/所有者的生命周期管理混合时打开一个新的蠕虫罐头;确保从正确的祖先类公开接口的类 TInterfacedObject -注意你的生活时间管理)。

    除了关于如何实现观察者模式的“纯”问题之外,还可以很好地识别Delphi中实现观察者模式的类。

    例如 TDataSet / TDataSource 同时执行 observer pattern .
    整个概念 Data Aware Controls 取决于它,所有这些都通过 TDataLink .

    我写了一篇 TDataLinkReflector 基于的组件 TDataLink 它反映了 TDATALLink 对事件 TDataLinkReflector .

    基于 t数据链路反射器 我写 TDataAwareControlController 对基于TDataset、其tfields和TDatasource链接到TDataset的数据感知控件执行各种有趣操作的组件(以只读方式着色、必需等)。

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

    另一个实现这个的类是 TApplicationEvents ;每个实例都允许您监听应用程序上的任何事件。

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

    ——杰罗恩

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