106 lines
2.4 KiB
ObjectPascal
106 lines
2.4 KiB
ObjectPascal
unit uControllerBase;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, uDADataTable;
|
|
|
|
type
|
|
ISujeto = interface;
|
|
|
|
IObservador = interface
|
|
['{679D5CF2-D5DC-4A52-9FF3-04AD91402483}']
|
|
procedure RecibirAviso(ASujeto: ISujeto); overload;
|
|
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); overload;
|
|
end;
|
|
|
|
ISujeto = interface
|
|
['{CDB691CD-D1D6-4F2E-AA34-93B1CD0E6030}']
|
|
procedure AddObservador(Observador: IObservador);
|
|
procedure DeleteObservador(Observador: IObservador);
|
|
end;
|
|
|
|
TObservador = class(TInterfacedObject, IObservador)
|
|
protected
|
|
procedure RecibirAviso(ASujeto: ISujeto); overload; virtual;
|
|
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); overload; virtual; abstract;
|
|
end;
|
|
|
|
TSujeto = class(TInterfacedObject, ISujeto)
|
|
private
|
|
fObservadores: IInterfaceList;
|
|
protected
|
|
procedure AvisarObservadores; overload;
|
|
procedure AvisarObservadores(ADataTable: IDAStronglyTypedDataTable); overload;
|
|
public
|
|
constructor Create; virtual;
|
|
procedure AddObservador(Observador: IObservador);
|
|
procedure DeleteObservador(Observador: IObservador);
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
IControllerBase = IObservador;
|
|
TControllerBase = TObservador;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils;
|
|
|
|
{ TSujeto }
|
|
|
|
procedure TSujeto.addObservador(Observador: IObservador);
|
|
begin
|
|
FObservadores.Add(Observador);
|
|
end;
|
|
|
|
procedure TSujeto.AvisarObservadores;
|
|
var
|
|
i: Integer;
|
|
AObs : IObservador;
|
|
begin
|
|
for i := 0 to Pred(FObservadores.Count) do
|
|
begin
|
|
if Supports(FObservadores[i], IObservador, AObs) then
|
|
AObs.RecibirAviso(Self);
|
|
end;
|
|
end;
|
|
|
|
procedure TSujeto.AvisarObservadores(ADataTable: IDAStronglyTypedDataTable);
|
|
var
|
|
i: Integer;
|
|
AObs : IObservador;
|
|
begin
|
|
for i := 0 to Pred(FObservadores.Count) do
|
|
begin
|
|
if Supports(FObservadores[i], IObservador, AObs) then
|
|
AObs.RecibirAviso(Self, ADataTable);
|
|
end;
|
|
end;
|
|
|
|
constructor TSujeto.Create;
|
|
begin
|
|
inherited;
|
|
FObservadores := TInterfaceList.Create;
|
|
end;
|
|
|
|
procedure TSujeto.DeleteObservador(Observador: IObservador);
|
|
begin
|
|
FObservadores.Remove(Observador);
|
|
end;
|
|
|
|
destructor TSujeto.Destroy;
|
|
begin
|
|
FObservadores := NIL;
|
|
inherited;
|
|
end;
|
|
|
|
{ TObservador }
|
|
|
|
procedure TObservador.RecibirAviso(ASujeto: ISujeto);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
end.
|