singleton之我见

原创 2004年12月30日 13:18:00

先和大家说说什么是singleton模式的,它中文意应该为单一模式,但好别扭,也不知道是谁翻译的
29796428(qiubole) 12:26:46
它属于创建模式的一种
29796428(qiubole) 12:27:00
主要的作用就是确实一个类有且只有唯一的一个实例
29796428(qiubole) 12:27:10
这在实际当中,其实还是有一些用处的
29796428(qiubole) 12:27:41
比如,当前用户这个类,我们就应该只保证其只有一份
29796428(qiubole) 12:27:57
一般我们在写程序的时候,经常会为某一个类,或某一个窗体定义一个全局变量
29796428(qiubole) 12:28:06
但有了这个变局变量会带来很多的问题
29796428(qiubole) 12:28:28
一是,无法使用方便的命名空间(这在DELPHI中是没有的,没这概念)
29796428(qiubole) 12:28:39
二是,无法控制它的多次创建
29796428(qiubole) 12:28:53
利用singleton模式就能很好的解决这个问题
29796428(qiubole) 12:29:11
我们都知道,在delphi中,只有类方法,而没有类变量
29796428(qiubole) 12:29:25
所谓的类方法,就是其它如c++或java叫的静态方法
29796428(qiubole) 12:29:35
delphi采用的是smalltalk的叫法,称之为类方法
29796428(qiubole) 12:29:45
它的基本表现形式是 class procedure, class function
29796428(qiubole) 12:30:00
如果大家看过TObject这个对象的源码的话,就应该比较了解
29796428(qiubole) 12:30:14
诸如InitInstance, InstanceSize等
29796428(qiubole) 12:30:35
但delphi有一点,也是最让人不爽的一点,它只提供类方法,不提供静态属性,就是static变量
29796428(qiubole) 12:31:00
那么,我们就只好通过一种折 (这字不会打,妈的)的办法
29796428(qiubole) 12:31:23
c#里这样实现
 private static int i;
29796428(qiubole) 12:31:40
delphi没办法,只好把它放到implementation下面
29796428(qiubole) 12:31:56
这里的变量,只有当前单元的类的能访问
29796428(qiubole) 12:32:11
很好了,我们要的就是它,把它当成static吧
29796428(qiubole) 12:32:48
singleton的目的是控制上面说的两点,它又是如何做到的呢
29796428(qiubole) 12:33:07
其实,很简单,还是要通过class function 来入手
29796428(qiubole) 12:33:29
当任何使用这个对象的时候,都必须通过某一个静态方法(类方法)来访问所要的对象的实例
29796428(qiubole) 12:33:42
我们只要提供如下方法,一切就OK了
29796428(qiubole) 12:34:11
type
  TKillAll = class
    class function Instance: TKillAll;
  end;
29796428(qiubole) 12:35:06
implementation
var
  locKillAll: TKillAll;
class function TKillAll.Instance: TKillAll;
begin
  if locKillAll = nil then
    locKillAll := TKillAll.Create;
  result := locKillAll;
end;
29796428(qiubole) 12:35:16
ok,就是这么简单了,明白了没有????  
同时,一定要防止用户直接调用create,设置一个局部变量,如果是由Instance 调用的Create,就允许创建,否则,就抛出异常

信息安全之我见

信息安全之我见 我曾在2007~2008年间在信息安全行业工作,今时又有机会接触到这个行业。所以有新的思考也有新的想法。 信息安全行业技术理论指导较少,多是一些hack的技术“点”。而这些点彼此缺...
  • zjjoy360
  • zjjoy360
  • 2015年12月07日 20:15
  • 508

人工智能之我见

作者:Albert Xiao 邮箱:xiaoxiaoyushan@126.com 备注:请尊重原创(手机端Markdown编辑,请理解 )   本来学数学、物理好好...
  • BladeTangXiao
  • BladeTangXiao
  • 2017年05月17日 10:14
  • 192

项目管理之我见

项目管理是一整体的系列活动:实施前、实施中、实施后,环环相扣。     实施前:     项目经理要与销售人员进行详尽的沟通,要充分了解客户的需求,特别是一些迫切的需求,大致确认好项目实施的重点内容;...
  • Gavid0124
  • Gavid0124
  • 2014年07月03日 11:39
  • 859

C++中多线程与Singleton的那些事儿

前言 前段时间在网上看到了个的面试题,大概意思是如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton。 看到这个题目后,第一个想法就是用Scott Meyer在《Effec...
  • zmlcool
  • zmlcool
  • 2016年06月11日 17:56
  • 773

“一盘沙拉”带你入门Dagger2(四)之 @Singleton

@Singleton可以方便地实现单例(全局单例)我们在Salad类里面引入两个Orange的实例,查看他们的内存地址public class Salad { @Inject//桔子1 O...
  • Android_Study_OK
  • Android_Study_OK
  • 2016年09月02日 16:42
  • 2763

操作系统之我见-进程

进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动 进程与程序的区别:(1)进程是程序的执行,动态概念,程序是一组指令的有序集合,静态概念 (2)进程是有生命的,程序是永久的 (3)...
  • erlei2014
  • erlei2014
  • 2015年10月20日 14:22
  • 198

每天一题(48) - C++实现Singleton模式

饿汉模式 代码(1) //.h文件 class Singleton { public: static Singleton& GetInstance(); private: Singleton(){...
  • insistGoGo
  • insistGoGo
  • 2013年07月22日 19:37
  • 3382

操作系统之我见-导论

操作系统的主要作用:(1)管理系统资源(cpu,主存储器,输入输出设备和数据文件)                                   (2)方便用户使用计算机等 通道技术:专门用...
  • erlei2014
  • erlei2014
  • 2015年10月16日 16:29
  • 205

Python和Singleton (单件)模式

我知道的一种在 python 中 Singleton mode 的实现如下: class Foo: pass def instance():     global inst ...
  • new_abc
  • new_abc
  • 2015年08月23日 12:09
  • 1255

C++ Singleton模式之线程安全

转自: http://blog.csdn.net/insistgogo/article/details/9412863 定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程...
  • nodeathphoenix
  • nodeathphoenix
  • 2016年06月13日 15:09
  • 741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:singleton之我见
举报原因:
原因补充:

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