Componentes - interface vs abstract |
Top Previous Next |
unit InterfacesTEste;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type // Modo 1 - usando interface IBaseECF = Interface(IInterface) procedure Mostra; end;
TNCR = Class(TInterfacedObject, IBaseECF) public procedure Mostra; end;
TSweda = Class(TInterfacedObject, IBaseECF) public procedure Mostra; end;
// Modo 2 - usando abstract TBaseECF2 = class(TObject) Nome: string; procedure Mostra; virtual; abstract; constructor Create; destructor Destroy; end;
TNCR2 = Class(TBaseECF2) public procedure Mostra; override; constructor Create; end;
TSweda2 = Class(TBaseECF2) public procedure Mostra; override; constructor Create; end;
// form TForm2 = class(TForm) Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); end;
var Form2: TForm2;
implementation
{$R *.dfm}
// ------------------------------------- modo 1
procedure TNCR.Mostra; begin ShowMessage('NCR'); end;
procedure TSweda.Mostra; begin ShowMessage('SWEDA'); end;
// ------------------------------------- modo 2
constructor TBaseECF2.Create; begin // end;
destructor TBaseECF2.Destroy; begin
end;
constructor TNCR2.Create; begin end;
procedure TNCR2.Mostra; begin ShowMessage('NCR2'); end;
constructor TSweda2.Create; begin end;
procedure TSweda2.Mostra; begin ShowMessage('SWEDA2'); end;
// -------------------------------------------------------------- exemplo 1
procedure TForm2.Button1Click(Sender: TObject); var NCR : TNCR; Sweda: TSweda; Base : IBaseECF; begin NCR := TNCR.Create; Sweda:= TSweda.Create;
Base := NCR; Base.Mostra;
Base := SWEDA; Base.Mostra;
Base := nil; // NCR.Free; nao permite!! // Sweda.Free; end;
// -------------------------------------------------------------- exemplo 2
procedure TForm2.Button2Click(Sender: TObject); var NCR2 : TNCR2; SWEDA2: TSWEDA2; Base : TBaseECF2; begin NCR2 := TNCR2.Create; SWEDA2:= TSWEDA2.Create;
Base := NCR2; Base.Mostra;
Base := SWEDA2; Base.Mostra;
NCR2.Free; SWEDA2.Free; end;
{ vantagem do modo 2: permite implementar algumas rotinas no objeto base
}
end. |