unit Singleton;
(*
单例模式适用于辅助类, 一般伴随于单元的生命周期
*)
interface
uses SysUtils; type
TSingleton = class
public
class function NewInstance : TObject; override;
class function GetInstance : TSingleton;
destructor Destroy; override;
procedure FreeInstance; override; function Address : integer;
end; implementation
var
FSingleton : TSingleton = nil;
FCanFree : Boolean; { TSingleton }
function TSingleton.Address: integer;
begin
Result := Integer(Self);
end; destructor TSingleton.Destroy;
begin
inherited;
end; procedure TSingleton.FreeInstance;
begin
if not FCanFree then Exit;
inherited FreeInstance;
FSingleton := nil;
end; class function TSingleton.GetInstance: TSingleton;
begin
if not Assigned(FSingleton) then
begin
FSingleton := TSingleton.Create;
end;
Result := FSingleton;
end; class function TSingleton.NewInstance: TObject;
begin
if not Assigned(FSingleton) then
begin
FSingleton := TSingleton(inherited NewInstance);
end;
Result := FSingleton;
end; initialization
FSingleton := TSingleton.Create; finalization
FCanFree := True;
if Assigned(FSingleton) then
begin
FSingleton.Free;
FSingleton := nil;
end; end. uses Singleton; procedure TForm1.btn1Click(Sender: TObject);
var
vTest, vTest2 : TSingleton;
begin
vTest := TSingleton.Create;
ShowMessage(IntToStr(vTest.Address)); vTest2 := TSingleton.Create;
ShowMessage(IntToStr(vTest2.Address)); // vTest.free;
FreeAndNil(vTest);
vTest2.free;
end;

最新文章

  1. [转]XSS现代WAF规则探测及绕过技术
  2. html尖角提示框的实现
  3. ACCP7.0-S2-复习自测-15测试分析
  4. MCS51系列单片机实用技术部分课件
  5. Js获取当前日期时间及时间相关操作
  6. ubuntu系统软件
  7. MVC-登录并设置角色
  8. 手游:cocos2d-x3.0 移植 wp8 开发 各种 “蛋疼”问题的汇总
  9. ggts下载地址
  10. Linux性能统计工具
  11. HQL查询——查询返回对象类型分析
  12. Oracle子查询中any、some、all之间的区别
  13. DVWA安装问题(phpStudy)
  14. 华为云(ECS)-linux服务器中-Ubuntu图形界面安装-解决root登录受限-VNCviwer/Teamviwer远程访问教程
  15. tomcat多端口配置
  16. ubuntu 14.04 上配置vlc组播源
  17. 【托业】【新托业TOEIC新题型真题】学习笔记12-题库八-P7
  18. Even Odds (java)
  19. os 模块 和 os模块下的path模块
  20. HMM条件下的 前向算法 和 维特比解码

热门文章

  1. 程序员如何 10 分钟用 Python 画出蒙娜丽莎?
  2. Vue父组件向子组件传值
  3. Debian安装wine运行Windows软件
  4. MapReduce On Yarn的执行流程
  5. ES6学习笔记-扩展运算符(...)
  6. GeneWise
  7. Golang的基础数据类型-整型
  8. SpringBoot 系列教程之事务隔离级别知识点小结
  9. Python MySQL Limit
  10. Kaggle: House Prices: Advanced Regression Techniques