Delphi

本类阅读TOP10

·分布式网络考试系统原型分析及实现
·游戏外挂设计技术探讨①
·使用HOOK随心监视Windows
·Delphi 水晶报表打包解决
·试题库开发中非文本数据的处理
·如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
·如何使用Delphi设计强大的服务器程序
·工人线程中关闭窗体的实现
·用DLL方式封装MDI子窗体。
·支持XP下托盘栏气球提示的托盘单元

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
用 ModelMaker 生成 单例程窗体模式

作者:未知 来源:月光软件站 加入时间:2005-6-5 月光软件站

{*
单元说明    :  用 ModelMaker 生成 单例程窗体模式。
作者        :   
笔名        :  易  一    英文名:yeeyee
E-Mail      :  jane1437@163.com
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 模式编程。

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




相关文章

相关软件




月光软件源码下载编程文档电脑教程网站优化网址导航网络文学游戏天地生活休闲写作范文安妮宝贝站内搜索
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有