unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, uSingleton, uSingletonDerivado;

type


  TfrmUmaInstancia = class(TForm)
    btUnico: TButton;
    btDerivado: TButton;
    btVerificaUnico: TButton;
    btVerificaDerivado: TButton;
    brCriaDerivadoEmAncestral: TButton;
    procedure btUnicoClick(Sender: TObject);
    procedure btDerivadoClick(Sender: TObject);
    procedure btVerificaUnicoClick(Sender: TObject);
    procedure btVerificaDerivadoClick(Sender: TObject);
    procedure brCriaDerivadoEmAncestralClick(Sender: TObject);
  public
  end;



var
  frmUmaInstancia: TfrmUmaInstancia;

implementation



{$R *.dfm}



procedure TfrmUmaInstancia.btDerivadoClick(Sender: TObject);
var FObjetoUnico: TObjetoUnicoDerivado;
begin
  //veja que é possivel executar o create
  //Mas dessa forma não é garantido que o objeto seja unico
  //para garantir que seja único é imprescindível o uso do método  CreateUnico

  FObjetoUnico := TObjetoUnicoDerivado.ObjetoUnico;

  //mostrando a classe do objeto, hora de criação e endereço do objeto
  //veja que é sempre igual
  ShowMessage('Nome da classe: ' + FObjetoUnico.ClassName+ #13#10 +
    'Hora de Criação: ' + FObjetoUnico.DataHora + #13#10 +
    'Endereço na memória: ' + IntToStr(Integer(FObjetoUnico))
  );

end;

procedure TfrmUmaInstancia.btUnicoClick(Sender: TObject);
var FObjetoUnico: TObjetoUnico;
begin

  //veja que é possivel executar o create
  //Mas dessa forma não é garantido que o objeto seja unico
  //para garantir que seja único é imprescindível o uso do método  CreateUnico

  FObjetoUnico := TObjetoUnico.ObjetoUnico;

  //mostrando a classe do objeto, hora de criação e endereço do objeto
  //veja que é sempre igual
  ShowMessage('Nome da classe: ' + FObjetoUnico.ClassName+ #13#10 +
    'Hora de Criação: ' + FObjetoUnico.DataHora + #13#10 +
    'Endereço na memória: ' + IntToStr(Integer(FObjetoUnico))
  );

end;




procedure TfrmUmaInstancia.btVerificaDerivadoClick(Sender: TObject);
begin
  VerificaObjetoUnicoDerivadoCriado;
end;

procedure TfrmUmaInstancia.btVerificaUnicoClick(Sender: TObject);
begin
  VerificaObjetoUnicoCriado;
end;

procedure TfrmUmaInstancia.brCriaDerivadoEmAncestralClick(Sender: TObject);
var FObjetoUnico: TObjetoUnico;
begin


  FObjetoUnico := TObjetoUnicoDerivado.ObjetoUnico;

  ShowMessage('Nome da classe: ' + FObjetoUnico.ClassName+ #13#10 +
    'Hora de Criação: ' + FObjetoUnico.DataHora + #13#10 +
    'Endereço na memória: ' + IntToStr(Integer(FObjetoUnico))
  );

end;


end.
