Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 21-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El patrón del observador consiste de un sujeto a observar (subject) y varios objetos que lo observan (observers). La idea es que cada cambio en el sujeto se notifica a los observadores que tenga conectados. Un ejemplo lo da un DataSet. Cada cambio en algún registro, se notifica a todos los controles dbaware conectados a él através de un DataSource

Como en todo patrón de diseño, puede haber muchas formas de implementarlo, pero la idea básica sería así:

Código Delphi [-]
type
  TObserver = class;

  TSubject = class
  public
    procedure Attach(Observer: TObserver); virtual; abstract;
    procedure Detach(Observer: TObserver); virtual; abstract;

    procedure Notify; virtual; abstract;
  end;

  TObserver = class
  public
    procedure Update(Subject: TSubject); virtual; abstract;
  end;

La idea es que ante algún cambio en SUBJECT que haya que informar, el método Notify recorre todos los OBSERVER conectados llamando a su método Update. Los métodos Attach y Detach están pensados para conecar un observador o desconectarlo.

En la implementación específica que hagas, TSubject debe mantener una lista interna de sus observadores, por ejemplo con un TObjectList, de manera que el método Notify se vería así:

Código Delphi [-]
procedure TSubject.Notify;
var
  I: Integer;

begin
  for I := 0 to FObservers.Count - 1 do
    TObserver(FObservers[i]).Update(Self);
end;

Puede haber muchos tipos de observadores, el único requisito sería que desciendan de TObserver e implementen el método Update. En este método, cada descendiente específico de TObsrver, hará lo que deba hacer usando la información proveniente del parámetro SUBJECT que se le pasa.

Todo esto es muy parecido a la forma en que Delphi maneja los eventos. Un Form, por ejemplo, es un observador de un TEdit que tenga dentro mediante el evento OnChange del TEdit. Cuando hay un cambio en el TEdit, se llama al evento OnChange, en caso de haber uno asignado.

La diferencia es que en el caso de eventos sólo puede haber un observador mientras que en el patrón general puede haber varios observadores, cada uno reaccionando de distinta manera.

// Saludos
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54


La franja horaria es GMT +2. Ahora son las 06:08:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi