2010-10-28 5 views
6

J'ai trouvé différentes implémentations du modèle d'observateur dans Delphi, comme: Sourcemaking Design Patterns et Delphi Hobbyist.Meilleure façon d'implémenter le modèle d'observateur dans Delphi

En général, quelle est la meilleure façon d'implémenter un observateur dans Delphi?
Je dirais utiliser des interfaces parce que le code est plus lisible.

+0

Interfaces pas tellement parce que le code devient plus lisible, mais parce que le code devient/est plus découplé. –

+0

Voici une autre implémentation à garder à portée de main: http://blogs.teamb.com/joannacarter/2004/06/30/690 –

Répondre

7

Il n'y a aucun moyen "bon" ou "meilleur" pour mettre en œuvre des modèles.
L'implémentation que vous choisissez dépend de la façon dont vous souhaitez l'utiliser.

Vous pouvez également utiliser la fonction génériques (disponible depuis Delphi 2009) pour simplifier l'utilisation de nombreux motifs. Et si vous utilisez des versions Pre Delphi-3, ou si vous voulez éviter reference counting vous ne pouvez pas utiliser d'interfaces.
(Le comptage des références peut ouvrir une nouvelle boîte de Pandore quand il est mélangé avec la gestion de durée de vie traditionnelle propriétaire/Ownee, assurez-vous de descendre les classes qui exposent les interfaces du bon ancêtre). En dehors de la question "pure" sur la façon d'implémenter le modèle d'observateur, il est également bon de pouvoir reconnaître des classes dans Delphi qui implémentent le modèle d'observateur.

Par exemple, les TDataSet/TDataSource implémentent également observer pattern.
Le concept entier de Data Aware Controls en dépend, tous liés par le TDataLink.

J'ai écrit une composante TDataLinkReflector sur la base TDataLink, qui reflète toutes les méthodes virtuelles dans TDataLink à des événements dans TDataLinkReflector.

base sur TDataLinkReflector je l'ai écrit TDataAwareControlController des composants qui ne toutes sortes de choses intéressantes à des contrôles Conscient des données basées sur l'TDataSet, ses TFields et TDatasource reliant à la TDataSet (coloration de lecture seule, nécessaire, etc.). Mais même une chose apparemment simple, comme les événements, peut être considérée comme basée sur ce modèle (bien que les événements soient simples, donc un seul observateur peut regarder un événement).

Une autre classe implémentant ceci est la TApplicationEvents; chaque instance vous permet d'écouter l'un des événements sur TApplication.

J'espère que cela éclaircira l'endroit où les motifs d'observateur sont utilisés dans Delphi.

--jeroen

PS: Toute personne intéressée par les composants que j'ai écrit peut-être envie de voir le CodeRage video mentioned here.

+0

Merci, réponse très informative. – LaBracca

Questions connexes