用Delphi实现Singleton模式

原创 2006年05月17日 15:21:00

Singleton模式定义:
Singleton(一般译作单件或单态)模式,它是设计模式中比较简单而常用的模式。有些时候在整个应用程序中,会要求某个类有且只有一个实例,这个时候可以采用Singleton模式进行设计。 关于Singleton模式的详细介绍,请参见GOF的著作《设计模式》,俺比较节省纸张,不摘抄过来了。

实现方法:

Delphi中有两个方法是负责创建与销毁对象的:

NewInstance是负责创建对象分配对象内存空间,FreeInstance则负责清除对象实例并且释放占用的内存空间,具体这两个方法的实现过程可以参看System.pas中的代码。

我们还需要这两个变量:

Instance TSingleton对象的实例变量,Ref_Count则负责保存对象实例被创建的次数,以方便我们追踪对象的引用.

下面我们声明TSingleton对象:

 

我添加RefCount方法是为了能看到这个类的实际工作,通过这个方法可以查看对象的引用计数,但这个方法并非实现TSingleton对象所必须的方法。

那我们接下来就实现上面声明的三个方法:

 

 

上面的代码覆盖了NewInstance这个方法,只要判断TSingleton对象的实例已经存在,就直接返回对象实例,并增加对象的引用计数。同样我们覆盖了FreeInstance方法,只有当引用计数为零时,才真正的释放对象实例。这样的话在对象外部无论调用构造与析构方法多少次,真正创建与释放的只有一个对象实例。

上述代码在D 5,D6,D7均可正常使用,在D2005,D2006中对于Singleton模式还有更好的构造方法,这里就不继续探讨了。

测试代码:

javascript设计模式-singleton(单例)模式

singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数只能一次,单例模式,在该实例不存在的勤快下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,则会简单返回该对象的...
  • yilanyoumeng3
  • yilanyoumeng3
  • 2016年08月22日 14:38
  • 725

singleton模式的几种实现方式

一、最简单的方式 public static Singleton getInstance() { if (instance == null) { instance = new...
  • lxgwm2008
  • lxgwm2008
  • 2012年07月02日 22:17
  • 3571

[Java设计模式](一)怎样实现Singleton(单例)模式编程

单例模式是开发模式中最简单,最易于理解的一种模式。简单地说,它指的就是始终保持一个实例的意思。但是,Java的类是可以穿件多个实例的,那么,怎么实现呢? 顾名思义,单例模式就是只有一个实例。单例模式确...
  • u012942818
  • u012942818
  • 2015年03月30日 15:20
  • 1144

Delphi实现Singleton模式

        单例模式用于限制进程中只有一个某个类的对象,本例的Singleton是一个线程实例,在每一个时钟到达时检测是否到达某个时刻(本例的时刻存于Ini文件中),如果到达则产生一个线程,但是如...
  • delphiseabird
  • delphiseabird
  • 2005年01月04日 13:56
  • 745

singleton模式四种线程安全的实现

1.描述:     Singleton(单例)是设计模式的一种,为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.主要特点:          1)单例类确保自己只有一个实例(...
  • u013256816
  • u013256816
  • 2015年12月29日 15:30
  • 10931

设计模式、用Delphi实现---->Singleton 模式

Singleton模式起源Delphi的SINGLETON模式是在SINGLETON的基础上进行了扩展。更多SINGLETON模式的资料请参阅 《设计模式84页》目的保证一个类仅有一个实例,并提供一个...
  • programlover
  • programlover
  • 2001年11月28日 08:59
  • 747

Python实现Singleton模式

Singleton模式即单例对象必须必须保证只有一个实例存在。可以说Singleton是设计模式中最基本一种设计模式,在学习设计模式时一般都会先了解该模式。在Python中实现单例模式有很多方法,下面...
  • lqxqust
  • lqxqust
  • 2016年07月14日 16:49
  • 211

Singleton模式之Delphi实现

type TSingleton = class(TObject) public A : Integer; class function NewInstance: TObject; ov...
  • largewang
  • largewang
  • 2002年09月19日 09:23
  • 687

java实现单例singleton的几种模式

Singleton的4种实现方式1.静态工厂实现法静态工场估计是最常用的单例实现方式,例子如下(详细见注解)// 静态工厂实现法 public class CommonSingleton { /...
  • u012233832
  • u012233832
  • 2016年08月08日 23:37
  • 392

请用Java写一个Singleton出来

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为private的...
  • appleheshuang
  • appleheshuang
  • 2012年07月24日 21:10
  • 587
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Delphi实现Singleton模式
举报原因:
原因补充:

(最多只允许输入30个字)