O Observer é um pattern criado e usado onde não existem eventos (Java, 
p.exemplo).
Eventos é um approach mais interessante, ao meu ver.
Cria um evento que dispara no delete, um no update e etc.

  ----- Original Message ----- 
  From: anderson 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Wednesday, December 13, 2006 11:29 AM
  Subject: [delphi-br] Padrão Observer - Andreano, essa acho que é pra ti !


  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 ...

  unit OO;

  interface

  uses Classes;

  type

  TSubject = class;

  IObserver = interface

  procedure Update(ASubject :TSubject);

  end;

  TSubject = class

  strict private var

  FObservers:TList;

  public

  constructor Create;

  procedure Attach(AObserver :IObserver);

  procedure Detach(AObserver :IObserver);

  strict protected

  procedure NotifyObservers;

  end;

  TConcreteSubject = class(TSubject)

  public

  procedure Atualizar;

  end;

  TConcreteObserver = class(TInterfacedObject, IObserver)

  public

  procedure Update(ASubject :TSubject);

  end;

  implementation

  constructor TSubject.Create;

  begin

  inherited Create;

  FObservers := TList.Create;

  end;

  procedure TSubject.Attach(AObserver :IObserver);

  begin

  FObservers.Add(@AObserver);

  end;

  procedure TSubject.Detach(AObserver :IObserver);

  var

  idx :Integer;

  begin

  idx := FObservers.IndexOf(@AObserver);

  If idx <> -1 Then

  begin

  FObservers.Delete(idx);

  end;

  end;

  procedure TSubject.NotifyObservers;

  var

  Current :^IObserver;

  I: Integer;

  begin

  for Current in FObservers do

  begin

  Current.Update(self);

  end;

  end;

  procedure TConcreteObserver.Update(ASubject :TSubject);

  begin

  // put your code here

  end;

  procedure TConcreteSubject.Atualizar;

  begin

  self.NotifyObservers;

  end;

  end.

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



   

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

Responder a