2010-10-28 11 views
6

Ho trovato diverse implementazioni del pattern di osservatore in Delphi, ad esempio: Sourcemaking Design Patterns e Delphi Hobbyist.Il modo migliore per implementare il pattern di osservatore in Delphi

In generale, qual è il modo migliore per implementare un osservatore in Delphi?
Direi di usare le interfacce perché il codice è più leggibile.

+0

Interfacce non tanto perché il codice diventa più leggibile, ma perché il codice diventa/è più disaccoppiato. –

+0

Ecco un'altra implementazione da tenere a portata di mano: http://blogs.teamb.com/joannacarter/2004/06/30/690 –

risposta

7

Non v'è alcun modo o "buono" "migliore" per implementare modelli.
L'implementazione scelta dipende da come si desidera utilizzarla.

Si potrebbe ad esempio utilizzare anche la funzione generici (disponibile da Delphi 2009) per semplificare l'uso di molti modelli.

E se si utilizzano versioni di Pre Delphi-3 o si desidera evitare reference counting non è possibile utilizzare le interfacce.
(Il conteggio dei riferimenti può aprire una nuova lattina di worm se combinato con la tradizionale gestione del tempo di vita proprietario/proprietario: assicurati di scendere le classi che espongono le interfacce dall'antenato destro, come TInterfacedObject, e osserva la gestione del tuo tempo di vita).

Oltre alla "pura" domanda su come implementare il modello di osservatore, è anche bene essere in grado di riconoscere le classi in Delphi che implementano il modello di osservatore.

Ad esempio lo TDataSet/TDataSource implementa anche lo observer pattern.
L'intero concetto di Data Aware Controls dipende da esso, il tutto collegato tramite lo TDataLink.

Ho scritto un componente TDataLinkReflector basato sul TDataLink, che riflette tutti i metodi virtuali in TDataLink agli eventi in TDataLinkReflector.

Base sul TDataLinkReflector ho scritto TDataAwareControlController componenti che non tutti i tipi di cose interessanti ai dati Controlli Aware in base al TDataSet, le sue tfields e il TDataSource collega al TDataSet (colorazione in sola lettura, necessaria, ecc).

Ma anche una cosa apparentemente semplice come gli eventi può essere vista come basata su quel modello (sebbene gli eventi siano singoli cast, quindi solo un osservatore può guardare un evento).

Un'altra classe che implementa questo è TApplicationEvents; ogni istanza ti consente di ascoltare qualsiasi evento su TApplication.

Spero che getti un po 'di luce su dove vengono utilizzati i modelli di osservatore in Delphi.

--jeroen

PS: Chiunque sia interessato a componenti che ho scritto potrebbe desiderare di vedere il CodeRage video mentioned here.

+0

Grazie, risposta molto informativa. – LaBracca

Problemi correlati