麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

設(shè)計(jì)模式之singleton

2019-11-18 18:05:39
字體:
供稿:網(wǎng)友
 

PRogram singletonTest;

uses
  Forms,
  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;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  action:=cafree;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  close;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  selfptr:=nil;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  selfptr:=self;
end;

class function TForm2.GetInstancePtr: 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 if not assigned(Form.selfptr) then
  begin
    Form:=Tform2.Create(nil);
    p^:=integer(Form);
    result:=isave;
  end;
end;

class function TForm2.GetInstance: TForm2;
begin
  result:=pointer(GetInstancePtr);
end;

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;
end;

{ TSingleton }

destructor TSingleton.Destroy;
begin
  GetInstancePtr(1);
  inherited;
end;

class function TSingleton.GetInstance: Tsingleton;
begin
  result:=pointer(GetInstancePtr(0));
end;

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:
    begin
      if (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;
end;

 

procedure TSingleton.SetUsername(const Value: string);
begin
  Fusername := Value;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  singleton:Tsingleton;
begin
  singleton:=Tsingleton.GetInstance;
  singleton.Username:=Edit1.Text;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  singleton:Tsingleton;
begin
  singleton:=Tsingleton.GetInstance;
  Edit2.Text:=singleton.Username;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  singleton:Tsingleton;
begin
  singleton:=Tsingleton.GetInstance;
  singleton.Free;
end;

end.


上一篇:雙對(duì)象列表,雙字符串列表

下一篇:創(chuàng)建快捷方式到[啟動(dòng)]

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 成人国产精品久久久 | 国产日本在线播放 | 亚洲午夜久久久精品一区二区三区 | 成人爱爱电影 | 精品国产一区二区三区在线观看 | 欧美亚洲国产一区二区三区 | 久久精品无码一区二区日韩av | 欧美爱爱一区二区 | 九九热精品在线 | 精品国产精品久久 | 久草视频国产在线 | 毛片a片免费看 | 欧美日韩国产一区二区三区在线观看 | 91资源在线观看 | 国产一区精品在线观看 | 九九热在线视频观看这里只有精品 | www.17c亚洲蜜桃| 久草干| 蜜桃视频在线观看免费 | 久久手机在线视频 | 欧美高清另类自拍视频在线看 | 国产精品成人亚洲一区二区 | 亚洲一区免费观看 | 日本s级毛片免费观看 | 国产精选电影免费在线观看 | 国产美女视频一区二区三区 | 中文字幕在线网 | 国产99久久久国产精品下药 | 91短视频在线视频 | 19禁国产精品福利视频 | 亚洲91网| 曰韩av在线 | 免费一级肉体全黄毛片 | 久久久入口 | 91av网址 | 免费观看亚洲视频 | 成年毛片 | 国产美女爽到喷白浆的 | 国产亚洲精品一区二区三区 | 国产污污视频 | 亚洲精品久久久久www |