中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Delphi > 综合文章
用 ModelMaker 生成 单例程窗体模式
作者:未知 时间:2005-07-27 22:02 出处:CSDN 责编:chinaitpower
              摘要:用 ModelMaker 生成 单例程窗体模式

{*
单元说明    :  用 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 模式编程。

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


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有