設計模式觀察 Singleton

2021-05-25 22:26:41 字數 2638 閱讀 3490

本篇先討論單件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}}

設計模式觀察 Singleton

本篇先討論單件singleton,單件的目標是保證乙個型別只有乙個例項,那麼由誰來保證例項的唯一性呢?可能的方案有 a 呼叫端保證。呼叫端呼叫乙個類時,他是不需要也不會去考慮這個類是否已經被例項化的。而且把這樣的監管工作交給呼叫端是很不負責的做法。b 型別內部保證。型別內部如何保證?將例項建立工作放...

設計模式Singleton

設計模式singleton 引言 相信大多數拜讀過 gang of four erich gamma,richard helm,ralph johnson,john vlissides 的經典之作 design pattern 的同僚們,對這本書一定推崇有加。曾有人這麼宣告 只有在讀過 design...

設計模式 Singleton

關於singleton模式的理解與思考 1 singleton模式最常用的解決方案是什麼?2 singleton如何保證執行緒安全性?3 singleton物件的析構如何完成?singleton模式用來保證乙個程序中只有乙個某型別的實體,也就是說程序中的多執行緒可能共享該實體。共享該實體是指共享該實...