在Delphi开发中,我们经常会将程序中的一些配置写到ini配置文件中,为方便使用,这里使用单例模式是非常方便的:
在 Delphi 的以前版本中,实现单例模式比较“另类”,自从 Delphi 后期加入一些新的语法元素后,单例模式的实现显得更为标准,和 C++、Java 中的实现方法几乎一致,最主要原因就是 Delphi 加入了类变量的支持,关键字为”class var”。
{***********************************************************}
{ 单元名称: uSingletonConfig.pas
{ 单元功用: 读取配置文件-单例模式
{ 设计日期: 2015/07/20
{ 设 计 者: gqp
{***********************************************************}
unit uSingletonConfig;
//如果Delphi版本大于或等于XE2版本
{$IF RTLVersion >= 23.00}
{$DEFINE USE_XE2}
{$IFEND}
interface
uses
SysUtils, Windows, Messages, Classes, Forms, Dialogs, IniFiles;
type
TSingletonConfig = class
private
{$IFDEF USE_XE2}
class var Finstance: TSingletonConfig;
{$ENDIF}
protected
constructor Create; //不开放Create以保证只有一个实例
destructor Destory;
public
class function GetInstance: TSingletonConfig;
{$IFDEF USE_XE2}
class procedure FreeInstance;
{$ENDIF}
//配置参数
FbFenBao: Boolean;
end;
{$IFNDEF USE_XE2}
var
Finstance: TSingletonConfig;
{$ENDIF}
implementation
{ TSingletonConfig }
constructor TSingletonConfig.Create;
var
ini: TIniFile;
begin
Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'IniFile\Config.ini');
try
//读取配置文件
FbFenBao := ini.ReadBool('Config', 'FenBao', False);
finally
Ini.Free;
end;
end;
destructor TSingletonConfig.Destory;
begin
end;
{$IFDEF USE_XE2}
class procedure TSingletonConfig.FreeInstance;
begin
FreeAndNil(FInstance);
end;
{$ENDIF}
class function TSingletonConfig.GetInstance: TSingletonConfig;
begin
if FInstance = nil then FInstance := TSingletonConfig.Create;
Result := FInstance;
end;
{$IFNDEF USE_XE2}
initialization
Finstance := TSingletonConfig.Create;
finalization
FreeAndNil(Finstance);
{$ENDIF}
end.