Лучший способ реализовать шаблон наблюдателя в Delphi - PullRequest
6 голосов
/ 28 октября 2010

Я нашел различные реализации шаблона наблюдателя в Delphi, такие как: Шаблоны проектирования Sourcemaking и Delphi Hobbyist .

В общем, каков наилучший способреализовать наблюдателя в Delphi?
Я бы сказал, используя интерфейсы, потому что код более читабелен.

Ответы [ 2 ]

7 голосов
/ 28 октября 2010

Не существует "хорошего" или "наилучшего" способа реализации шаблонов.
Реализация, которую вы выбираете, зависит от того, как вы хотите ее использовать.

Вы можете, например, также использовать функцию обобщений (доступно с Delphi 2009) для упрощения использования большого количества шаблонов.

А если вы используете версии Pre Delphi-3 или хотите избежать reference counting, вы не можете использовать интерфейсы.
(Подсчет ссылок можетоткройте новую банку с червями при смешивании с традиционным управлением временем жизни на основе владельца / владельца; обязательно спустите классы, которые предоставляют интерфейсы от правого предка - например, TInterfacedObject - и следите за управлением временем жизни).

Помимо «чистого» вопроса о том, как реализовать шаблон наблюдателя, также хорошо иметь возможность распознавать классы в Delphi, которые реализуют шаблон наблюдателя.

Например, TDataSet / TDataSource также реализует шаблон наблюдателя .
Вся концепция Data Aware Controls зависит от этого, все связаны через TDataLink .

Я написал компонент TDataLinkReflector на основе TDataLink, который отражает все виртуальные методы вTDataLink к событиям в TDataLinkReflector.

Основываясь на TDataLinkReflector Я написал TDataAwareControlController компонентов, которые делают все виды интересных вещей для Data Aware Controls на основе TDataSet, его TFields иTDataSource, связывающий с TDataSet (раскраска только для чтения, требуется и т. д.).

Но даже кажущаяся простой вещь, такая как события, может рассматриваться как основанная на этом шаблоне (хотя события являются одиночными, так что только одиннаблюдатель может наблюдать одно событие).

Еще один класс, реализующий это, - TApplicationEvents ;каждый экземпляр позволяет прослушивать любое из событий в TApplication.

Я надеюсь, что это проливает некоторый свет на то, где используются шаблоны наблюдателей в Delphi.

- jeroen

PS: Любой, кто интересуется компонентами, которые я написал, может захотеть посмотреть видео CodeRage, упомянутое здесь .

2 голосов
/ 28 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...