Ver Mensaje Individual
  #11  
Antiguo 16-02-2009
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Reputación: 16
noob Va por buen camino
Pienso que mi singleton no funciona porque puedo declarar más de una variable de mi clase singleton:

Unit1:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Clase2: TClase2;
    Clase2b: TClase2;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Clase2 := TClase2.Create;
  Clase2b := TClase2.Create; // No debería dejarme crear esta instancia porque se supone que es un singleton
end;

end.

Unit2:

Código Delphi [-]
unit Unit2;

interface

type
  TClase2 = class
              private
                Contenido: String;
                function ObtenerContenido: String;
                procedure EstablecerContenido(Contenido: String);
              public
                class function NewInstance: TObject; override;
                procedure FreeInstance; override;
                property PropContenido: String read ObtenerContenido
                                               write EstablecerContenido;
            end;

implementation

var Clase2: TClase2; //Nota como esta variable se mantiene "oculta"

function TClase2.ObtenerContenido: String;
begin
  Result := Contenido;
end;

procedure TClase2.EstablecerContenido(Contenido: String);
begin
  Self.Contenido := Contenido;
end;

class function TClase2.NewInstance: TObject;
begin
  if (NOT Assigned(Clase2))
     then begin
            Clase2 := TClase2 (inherited NewInstance);
            // algo más que deba hacer....
          end;
  result := Clase2;
end;

procedure TClase2.FreeInstance;
begin
  Clase2 := nil;
  inherited FreeInstance;
end;

end.

Última edición por noob fecha: 16-02-2009 a las 22:59:56.
Responder Con Cita