内容简介:编程模式单例模式中强调一个程序中只有一个类的实例。C++中用类的static成员和static方法实现。用Delphi中没有static关键字,用全局变量保存实例不是好的实现方式。Delphi中有类方法可直接调用。在类方法中使用const实现类似C的static成员。
编程模式单例模式中强调一个程序中只有一个类的实例。
C++中用类的static成员和static方法实现。
用Delphi中没有static关键字,用全局变量保存实例不是好的实现方式。Delphi中有类方法可直接调用。在类方法中使用const实现类似C的static成员。
TSingle = class(TObject)
private
protected
constructor CreateInstance;
class funtion GetInstance(Request: integer): TSingle;
public
constructor Create;
destructor Destroy; override;
class procedure ReleaseInstance;
class function SingleInstance: TSingle;
end;
implementation
constructor TSingle.Create;
begin
inherited Create;
raise Exception.CreateFmt('只能通过SingleInstance方法来创建和访问%s的实例!', [ClassName]);
end;
constructor TSingle.CreateInstance;
begin
inherited Create;
end;
destructor TSingle.Destroy;
begin
if GetInstance(0) = self then GetInstance(2);
inherited Destroy;
end;
class function TSingle.GetInstance(Request: integer): TSingle;
const FInstance: TSingle = nil;
begin
{
Request = 0 : 不做任何处理,供释放时使用
Request = 1 : 存在该类实例时使用该实例,不存在时创建之
Request = 2 :返回一个空指针,用于重置实例
}
case Request of
0: ;
1: if not Assigned(FInstance) then FInstance := CreateInstance;
2: FInstance := nil;
else
raise Exception.CreateFmt('%d是GetInstance()的非法参数调用', [Request]);
end;
result := FInstance;
end;
class procedure TSingle.ReleaseInstance;
begin
GetInstance(0).Free;
end;
Class function TSingle.SingleInstance: TSingle;
begin
result := GetInstance(1);
end;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【C++】Delphi中类似C中static变量的实现
- 类似Github的webhook实现
- 类似 Qt 的 GOSP 发布修复更新
- ASP实现类似hashMap功能的类
- 使用 Reactor 完成类似 Flink 的操作
- PHP实现类似题库抽题效果
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。