用 ModelMaker 生成 单例程窗体模式

类别:Delphi 点击:0 评论:0 推荐:

{*
单元说明    :  用 ModelMaker 生成 单例程窗体模式。
作者        :   
笔名        :  易  一    英文名:yeeyee
E-Mail      :  [email protected]
My Blog     :   http://blog.csdn.net/yeeyee/
QQ          :   282624758
创建时间    :  2005年5月31日
及最后修改时间:
修改人修改时间:
修改说明:        
版权声明:      版权所有,转载请注明本人邮箱,笔名,
                          并保证文章的完整性。
调用说明:
优缺点说明:  
*}


//用 Model Maker 操作
1、在工程中建立一个类,
2、Run Model Maker
3、Convert Project To Model
4、View 菜单
5、Patterns
6、Apply SingleTon Pattern
7、Good Luck

英语有点差。

//模式

unit SingleTonForm;

interface

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

type
  TFormSingleTon = class(TForm)
    Edit1: TEdit;
  private
    FAOwner:TComponent;
    procedure SetAOwer(AValue:TComponent);
  protected
    class function AccessInstance(Request: Integer): TFormSingleTon;
  public
    constructor Create;
    constructor CreateInstance;
    destructor Destroy; override;
    class function Instance: TFormSingleTon;
    class procedure ReleaseInstance;
    property AOwner:TComponent read FAOwner write SetAOwer;
  end;
 
var
  FormSingleTon: TFormSingleTon;

implementation

{
******************************** TFormSingleTon ********************************
}

procedure TFormSingleTon.SetAOwer(AValue:TComponent);
begin
  if FAOwner<>AValue then
  begin
    FAOwner:=AValue;
  end;
end;

constructor TFormSingleTon.Create;
begin
  inherited Create(FAOwner);
  raise Exception.CreateFmt('Access class %s through Instance only', [ClassName]);
end;

constructor TFormSingleTon.CreateInstance;
begin
  inherited Create(FAOwner);
end;

destructor TFormSingleTon.Destroy;
begin
  if AccessInstance(0) = Self then AccessInstance(2);
  inherited Destroy;
end;

class function TFormSingleTon.AccessInstance(Request: Integer): TFormSingleTon;
 
  {$J+}
  const FInstance: TFormSingleTon = nil;
  {$J-}
 
begin
  case Request of
    0 : ;
    1 : if not Assigned(FInstance) then FInstance := CreateInstance;
    2 : FInstance := nil;
  else
    raise Exception.CreateFmt('Illegal request %d in AccessInstance', [Request]);
  end;
  Result := FInstance;
end;

class function TFormSingleTon.Instance: TFormSingleTon;
begin
  Result := AccessInstance(1);
end;

class procedure TFormSingleTon.ReleaseInstance;
begin
  AccessInstance(0).Free;
end;

{$R *.dfm}

end.

//1,调用,声明一个 Private 变量
    Private
 FFormSingleTon1:TFormSingleTon;
 FFormSingleTon2:TFormSingleTon;

//2,创建
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  FFormSingleTon1:=TFormSingleTon.Instance;
  FFormSingleTon2:=TFormSingleTon.Instance;
  FFormSingleTon1.Show;
  FFormSingleTon2.Show;
end;


//判断地址是否相等。
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
    if FFormSingleTon1=FFormSingleTon2 then
    begin
      ShowMessage('The Same');
    end
    else
    begin
      ShowMessage('Differ');
    end;   
end;


//释放
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
    FFormSingleTon1.ReleaseInstance;
    FFormSingleTon2.ReleaseInstance;
end;

说明:
1,外部调用函数:
也就是说,想调用这个 窗体,
创建用Instance
释放用ReleaseInstance
    class function Instance: TFormSingleTon;
    class procedure ReleaseInstance;
其余的函数内部使用。

2,
ShowMessage('The Same');
表明创建的窗体的地址相同,也就是说只有一个窗口。
这就是 SingleTon。

3,其余的看刘艺的 Delphi 模式编程。

有问题,请原谅,现在在学校,不是公司,我没有计算机,根据我网上的帖子修改,谢谢。

本文地址:http://com.8s8s.com/it/it4142.htm