国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

singleton之我見

2019-11-18 18:05:28
字體:
來源:轉載
供稿:網友
 

先和大家說說什么是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,就允許創建,否則,就拋出異常



上一篇:borland工程師如何保證父類(TStream)的兩個overload的seek,至少有一個必須被override

下一篇:實現QQ窗體的縮入伸出功能

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 嵩明县| 天祝| 梅州市| 集安市| 鞍山市| 阿图什市| 蚌埠市| 濉溪县| 治多县| 清丰县| 昂仁县| 崇左市| 鄂温| 常山县| 隆昌县| 大邑县| 吴旗县| 日土县| 望江县| 通道| 阳新县| 奉贤区| 和硕县| 封开县| 泊头市| 久治县| 玛沁县| 汾阳市| 天柱县| 来宾市| 家居| 福清市| 武强县| 香港| 平泉县| 湘阴县| 庆元县| 团风县| 六枝特区| 高唐县| 荃湾区|