Vlw pela dica, vou testar ...

 

  _____  

De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Joao Morais
Enviada em: quarta-feira, 13 de dezembro de 2006 11:14
Para: delphi-br@yahoogrupos.com.br
Assunto: Re: [delphi-br] Padrão Observer - Andreano, essa acho que é pra ti
!

 

anderson wrote:

> Alguém já tentou usar o padrão Observer usando o template do Delphi 2006,
> naum funciona, nem a rotina de Deletar Observer, nem a rotina de Update
dos
> Observer, segue o código inteiro gerado pelo próprio Delphi e que não
> funciona ...

Faz um teste com o Notifier do Press. Você não precisa usar o framework 
pra usar um notificador, basta dar um uses no PressNotifier.

Ele utiliza o padrão publish-subscriber -- cá estão algumas vantagens 
comparado ao padrão observer (das que eu lembrei agora):

1. você pode (deve) criar uma classe de notificação customizada, 
portanto, pode transportar dados dentro dos eventos;

2. você pode ouvir um evento específico, ou um evento de um objeto 
específico, ou selecionar eventos de um objeto que você queira ouvir, etc.

3. você pode enfileirar eventos para serem disparados apenas quando a 
aplicação entrar em modo Idle;

4. observadores podem escutar vários eventos bem como um objeto pode 
disparar vários tipos de eventos distintos;

Exemplo de uso:

Unit com a classe do evento:

uses
PressNotifier;

TEventoEvent = class(TPressEvent);

=====

Unit com a chamada:

uses
UnitDoEvento;

...

TEventEvent.Create(Self).Notify;

=====

Unit que vai escutar a notificação:

uses
PressNotifier;

TSuaClasse = class()
private
FNotifier: TPressNotifier;
procedure Notify(AEvent: TPressEvent);

...

uses
UnitDoEvento;

procedure TSuaClasse.Create;
begin
inherited;
FNotifier := TPressNotifier.Create(Notify);
FNotifier.AddNotificationItem(ObjOuNil, [TEventoEvent]);
end;

procedure TSuaClasse.Destroy;
begin
FNotifier.Free;
inherited;
end;

procedure TSuaClasse.Notify(AEvent: TPressEvent);
begin
if AEvent is TEventoEvent then
begin
// tratar o evento
end;
end;

às ordens,
--
João Morais

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a