我用Delphi实现的Singleton模式

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

unit uSingleton;

interface

uses

SysUtils;

type

ESingletonException = class(Exception);

TSingleton = class

private

// 单例类真正使用的构造函数,此处命名为CreateNew

constructor CreateNew;

public

// 用于阻止显式调用,因为即便将其设为私有的,

// 也可以调用构造函数Create,

// 虽然实际上调用的是其父类的构造函数,

// 这样显然不是很理想,

// 所以只好声明并在实现中引发 ESingletonException

constructor Create;

// 类方法,返回对唯一的实例

class function Instance: TSingleton;

end;

implementation

uses SyncObjs;

var

SingletonInstance: TSingleton = nil;

// 用于锁定 TSingleton.Instance 方法,防止多线程访问

SingletonLocker: TCriticalSection = nil;

{ TSingleton }

constructor TSingleton.Create;

begin

raise ESingletonException.Create('单例类,禁止显式调用构造函数');

end;

constructor TSingleton.CreateNew;

begin

// do something

end;

class function TSingleton.Instance: TSingleton;

begin

SingletonLocker.Enter;

try

if not Assigned(SingletonInstance) then

SingletonInstance := TSingleton.CreateNew;

Result := SingletonInstance;

finally

SingletonLocker.Leave;

end;

end;

initialization

SingletonLocker := TCriticalSection.Create;

finalization

SingletonLocker.Free;

end.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航