設計模式研究(二) Singleton

2022-01-31 04:47:57 字數 2708 閱讀 9862

上篇:設計模式研究(一)例項比較templatemethod與strategy

本篇先討論單件singleton,單件的目標是保證乙個型別只有乙個例項,那麼由誰來保證例項的唯一性呢?可能的方案有:

a)呼叫端保證。

呼叫端呼叫乙個類時,他是不需要也不會去考慮這個類是否已經被例項化的。而且把這樣的監管工作交給呼叫端是很不負責的做法。

b)型別內部保證。

型別內部如何保證?

將例項建立工作放到型別內部,這樣型別就可以將例項建立工作監管起來。型別可以知道內部的例項有沒有被建立,甚至可以知道建立例項的工作被執行了多少次。

所以個人認為理解單件需要分為兩步:

1、 監管工作誰來做?例項的監管工作需要型別自己去做。

2、 監管工作如何做?型別如何保證例項唯一就是技術實現問題了,可以看到的版本有 執行緒安全的、雙重鎖定的、延遲初始化的等。

下面使用偽**逐步分析例項化工作放到型別內部的做法。

呼叫我,例項我給你

class

singleton

}你只管呼叫,我保證唯一

class

singleton

//例項化型別 singleton,例項化時判斷型別有沒有被建立過,這樣就保證了例項的唯一

singleton getinstance()

return

instance;}}

你們都可以呼叫,我需要統計呼叫次數

class

singleton

//例項化型別 singleton

singleton getinstance()

//例項化型別 singleton,例項化時判斷型別有沒有被建立過,這樣就保證了例項的唯一

singleton getinstance()

return

instance;}//

例項化型別 singleton,並且加入乙個計數器,這樣能知道例項化工作被執行了多少次

singleton getinstance()

return

instance;}}

想使用例項?請出示合法證件

class

singleton

//例項化型別 singleton

singleton getinstance()

//例項化型別 singleton,例項化時判斷型別有沒有被建立過,這樣就保證了例項的唯一

singleton getinstance()

return

instance;}//

例項化型別 singleton,並且加入乙個計數器,這樣能知道例項化工作被執行了多少次

singleton getinstance()

return

instance;}//

例項化型別 singleton,並且接收乙個合法的授權,這樣可以知道每個授權方的呼叫次數,使用頻率

singleton getinstance(

string

caller)

return

instance;

}else

return

null;}

//記錄呼叫方呼叫次數

public

void

callercount(

string

caller)

public

bool

check(

string

caller)

}歡迎一起討論!

--------------------------補充-------------------------------

我把幾種流行的 singleton 寫法發出來,省的大家再去查資料。

public

sealed

class

mysingleton

//簡單寫法

public

static

mysingleton istance 

return

instance;}}

//執行緒安全

static

readonly

object

obj 

=new

object

();public

static

mysingleton safeinstance}}

//雙重鎖定 節約開銷

public

static

mysingleton lockinstance

}return

instance;}}

//靜態初始化

static

mysingleton() 

static

readonly

mysingleton staticinstance 

=new

mysingleton();

public

static

mysingleton staticinstance}//

延遲初始化

public

static

mysingleton lazyinstance

}class

lazy}}

java設計模式 單例模式(Singleton)

設計模式 design pattern 是一套被反覆使用 經過分類編目 設計經驗的總結。目的 為了可重用 讓 更容易被他人理解 保證 的可靠性。適用場景 有些物件我們只需要乙個,比如,配置檔案 工具類 執行緒池 快取 日誌物件等。作用 保證整個應用程式中某個例項有且只有乙個。餓漢式 public c...

(原創)無廢話C 設計模式之二 Singleton

無廢話c 設計模式之二 singleton 意圖 保證乙個類只有乙個例項,並提供訪問它的全域性訪問點。場景 我們現在要做乙個網路遊戲的服務端程式,需要考慮怎麼樣才能承載大量的使用者。在做web程式的時候有各種負載均衡的方案,不管是通過硬體實現還是軟體實現,基本的思想就是有乙個統一的入口,然後由它來分...

(原創)無廢話C 設計模式之二 Singleton

無廢話c 設計模式之二 singleton 意圖 保證乙個類只有乙個例項,並提供訪問它的全域性訪問點。場景 我們現在要做乙個網路遊戲的服務端程式,需要考慮怎麼樣才能承載大量的使用者。在做web程式的時候有各種負載均衡的方案,不管是通過硬體實現還是軟體實現,基本的思想就是有乙個統一的入口,然後由它來分...