分享
 
 
 

singleton之我见

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

先和大家说说什么是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,就允许创建,否则,就抛出异常

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有