您的位置:首页 > 编程语言 > Delphi

《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用全局变量)

2010-10-30 16:07 561 查看
示例:单件接口(使用全局变量)
说明:
(1)、定义
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
(2)、结构



Singleton:
定义一个Instance类操作,负责创建它自己的唯一实例。
客户只能通过Instance操作访问一个Singleton的实例。
(3)、特点
让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。这就是单件模式。
(4)、效果
<1>、对唯一实例的受控访问
因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。
<2>、缩小名空间
Singleton模式是对全局变量的一种改进。它避免了那些存储唯一实例的全局变量污染名空间。

代码:

unit uSingleton1;

interface

uses
SysUtils, Dialogs;

type
TSingleton = class(TObject)
private
FSingletonData: string;
function GetSingletonData: string;
procedure SetSingletonData(const Value: string);
public
constructor Create;
destructor Destroy; override;
//---
class function Instance: TSingleton;
procedure SingletonOperation;
//---
property SingletonData: string read GetSingletonData write SetSingletonData;
end;

implementation

var
unigueInstance: TSingleton;

constructor TSingleton.Create;
begin
if unigueInstance = nil then
unigueInstance := Self
else
abort;
end;

destructor TSingleton.Destroy;
begin
unigueInstance := nil;
//---
inherited;
end;

class function TSingleton.Instance: TSingleton;
begin
if unigueInstance = nil then
unigueInstance := TSingleton.Create;
//---
Result := unigueInstance;
end;

function TSingleton.GetSingletonData: string;
begin
Result := FSingletonData;
end;

procedure TSingleton.SetSingletonData(const Value: string);
begin
FSingletonData := Value;
end;

procedure TSingleton.SingletonOperation;
begin
ShowMessage(FSingletonData);
end;

end.

procedure TForm1.Button5Click(Sender: TObject);
begin
//---
with TSingleton.Instance do
begin
SingletonData := '123';
SingletonOperation;
end;
//---
with TSingleton.Instance do
begin
SingletonData := '456';
SingletonOperation;
end;
//---
TSingleton.Instance.Free;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐