Tecsitel_FactuGES2/Source/Base/Controladores/uControllerBase.pas

106 lines
2.4 KiB
ObjectPascal
Raw Normal View History

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.