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;

delphi 单例模式的更多相关文章

  1. delphi 单例模式实现

    unit Unit2; interface uses System.SysUtils; type { TSingle } TSingle = class(TObject) private FStr: ...

  2. Delphi - 互斥对象下实现系统的单例模式

    使用CreateMutex函数创建互斥对象 利用Windows系统函数CreateMutex(),找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体. CreateMutex函数原型如下 ...

  3. Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler[转]

     1  2{<HeadFirst设计模式>之单例模式 }  3{ 编译工具: Delphi2007 for win32 }  4{ E-Mail : guzh-0417@163.com   ...

  4. Delphi ThreadPool 线程池(Delphi2009以上版本适用)

    http://blog.sina.com.cn/s/blog_6250a9df0101kref.html 在网上查找Delphi线程池,结果发现寥寥无几. 看了半天源代码,弄得一头雾水,觉得不容易理解 ...

  5. delphi 窗体的创建和释放

    Delphi中的窗体分为模式窗体和无模式窗体.二者的区别在于,用户可以在无模式窗体和其他窗体之间切换.这样,用户就可以同时工作于一个应用程序的几个部分.Delphi中窗体的初始化有两种情况,动态创建, ...

  6. Elite Container DELPHI下的一个轻量级IoC对象容器

    一.简介: Elite Container是DELPHI下的一个轻量级IoC对象容器(IoC:Inverse of Control,反转控制).它是参考了Java中的Spring框架(主要是配置文件的 ...

  7. C++实现线程安全的单例模式

    在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...

  8. 23种设计模式--单例模式-Singleton

    一.单例模式的介绍 单例模式简单说就是掌握系统的至高点,在程序中只实例化一次,这样就是单例模式,在系统比如说你是该系统的登录的第多少人,还有数据库的连接池等地方会使用,单例模式是最简单,最常用的模式之 ...

  9. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

随机推荐

  1. springboot学习3事务控制

    springboot学习3事务控制 spring的事务控制本质上是通过aop实现的. 在springboot中使用时,可以通过注解@Transactional进行类或者方法级别的事务控制,也可以自己通 ...

  2. 图片上传--base64

    <?php defined('BASEPATH') OR exit('No direct script access allowed'); include_once (APPPATH . &qu ...

  3. python基础学习(一)

    一,Python介绍 1,python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打 ...

  4. thread.start和threadstart.invoke的区别

    new Thread(() =>refreshDGVdelegate(App.StockList)).Start();//在新线程中执行操作 new ThreadStart(() => r ...

  5. Debian安装wine运行Windows软件

    1.sudo dpkg --add-architecture i386,使系统支持32位应用 2.wget -nc https://dl.winehq.org/wine-builds/Release. ...

  6. 使用Python的PIL库做的图像相似度对比源码备份

    #!/usr/bin/python # Filename: histsimilar.py # -*- coding: utf-8 -*- import PIL.Image def make_regal ...

  7. SYSTEMTIME 获取日期之差

    #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h& ...

  8. C++面试常见问题——05字符串的逆序

    字符串的逆序 #include<iostream> #include<string.h> using namespace std; void ReverseStr(char s ...

  9. Gerrit部署成功后project下不显示clone地址

    gerrit部署成功后使用admin账号登录,在project All-projects下不显示clone地址,新建仓库也不显示. 原因是:默认安装没有安装插件download-commands 安装 ...

  10. 设置gvim的字体大小

    1.临时设置: 进入命令行模式输入: set guifont=Courier\ New:h10 2.永久设置: 打开安装目录找到defaults.vim在最后一行输入: set guifont=Cou ...