Singleton design pattern

xiaoxiao2021-03-06  40

Program Singletontest;

Uses form, mainfrm in 'mainfrm.pas' {form1}, singletonfrm in 'Singletonfrm.Pas' {FORM2};

{$ R * .res}

Begin Application.initialize; Application.createform (TFORM1, FORM1); Application.Run; End.Unit SingletonFrm

Interface

Uses Windows, Messages, Sysutils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls;

type TForm2 = class (TForm) Button1: TButton; Button2: TButton; Edit1: TEdit; procedure Button1Click (Sender: TObject); procedure FormClose (Sender: TObject; var Action: TCloseAction); procedure Button2Click (Sender: TObject); procedure FormDestroy (Sender: TObject); procedure FormCreate (Sender: TObject); private {Private declarations} public {public declarations} selfptr: Tform2; class function GetInstancePtr: integer; class function GetInstance: TForm2; end;

Var Form2: TFORM2;

IMPLEMENTATION

{$ R * .dfm} procedure tform2.button1click (sender: TOBJECT); begin hide;

Procedure TFORM2.FormClose (Sender: Tobject; VAR Action: Tclosection); begin action: = cafree;

Procedure TFORM2.BUTTON2CLICK (Sender: TOBJECT); begin close;

Procedure TFORM2.FORMDESTROY (Sender: TOBJECT); Begin Selfptr: = NIL; END;

Procedure TFORM2.FormCreate (Sender: TOBJECT); Begin Selfptr: = Self; End;

Class Function TFORM2.GETITINSTANCEPTR: INTEGER; Const Isave: Integer = 0; Var Pr: Pointer; P: ^ Integer; Form: TFORM2; Begin P: = @ Isave; Form: = NIL; IF (isave <> 0) THEN BEGIN Result: = isave; form: = pointer (isave); end; if not assigned (form) THEN BEGIN form: = tForm2.create (nil); p ^: = integer (form); result: = isave; end else NOT ASSIGNED (Form.selfptr) THEN BEGIN FORM: = TFORM2.CREATE (NIL); p ^: = INTEGER (form); result: = isave; end; end; class function tform2.getinstance: tForm2; recomcom: = Pointer GetInstancePtr);

End.unit mainfrm;

Interface

Uses Windows, Messages, Sysutils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls;

type TForm1 = class (TForm) Button1: TButton; Edit1: TEdit; Button2: TButton; Button3: TButton; Edit2: TEdit; Button4: TButton; Button5: TButton; procedure Button2Click (Sender: TObject); procedure Button1Click (Sender: TObject) ; procedure Button3Click (Sender: TObject); procedure Button4Click (Sender: TObject); procedure Button5Click (Sender: TObject); private {Private declarations} public {public declarations} end;

TSingleton = class (TObject) private Fusername: string; procedure SetUsername (const Value: string); published destructor Destroy; override; public property Username: string read Fusername write SetUsername; class function GetInstancePtr (value: integer): integer; class Function GetInstance : Tsingleton; end;

Var Form1: TFORM1;

IMPLEMENTATION

Uses Singletonfrm;

{$ R * .dfm}

procedure TForm1.Button1Click (Sender: TObject); var Form2: TForm2; begin Form2: = Tform2.GetInstance; Edit1.Text: = inttostr (integer (Form2)); Form2.Show; end; procedure TForm1.Button2Click (Sender: TObject ); var FRM2: TFORM2; Begin FRM2: = TFORM2.GETINSTANCE; frm2.free;

{Tsingleton}

DESTRUCTOR TSIINGETON.DESTROY; Begin GetInstancePtr (1); inherited;

Class Function Tsingleton.GetInstance: Tsingleton; Begin Result: = POINTER (GetInstancePtr (0));

Class Function Tsingleton.GetInstancePtr (Value: Integer): Integer; const isave: integer = 0; var P: ^ integer; obj: tsingleton; begin p: = @ isave; obj: = nil; case value of 0: beginiff ISAVE <> 0) THEN Begin Result: = isave; Obj: = Pointer (isave); end; if not assigned (obj) THEN BEGIN OBJ: = Tsingleton.create; p ^: = integer (obj); result: = isave ; End end; 1: begin p ^: = 0; end; end;

Procedure tsingleton.setUsername (const value: string); begin fusername: = value;

Procedure TForm1.Button3Click (Sender: Tobject); var singleton: tsingleton; begin singleton: = tsingleton.getinstance; singleleton.username: = Edit1.Text;

Procedure TForm1.Button4Click (Sender: Tobject); VAR Singleton: Tsingleton; Begin Singleton: = Tsingleton.GetInstance; Edit2.Text: = Singleton.usename;

Procedure TForm1.Button5Click (Sender: Tobject); VAR Singleton: Tsingleton; Begin Singleton: = Tsingleton.GetInstance; Singleton.Free;

End.

转载请注明原文地址:https://www.9cbs.com/read-75168.html

New Post(0)