本篇先討論單件singleton,單件的目標是保證乙個型別只有乙個例項,那麼由誰來保證例項的唯一性呢?可能的方案有:
a)呼叫端保證。
呼叫端呼叫乙個類時,他是不需要也不會去考慮這個類是否已經被例項化的。而且把這樣的監管工作交給呼叫端是很不負責的做法。
b)型別內部保證。
型別內部如何保證?
將例項建立工作放到型別內部,這樣型別就可以將例項建立工作監管起來。型別可以知道內部的例項有沒有被建立,甚至可以知道建立例項的工作被執行了多少次。
所以個人認為理解單件需要分為兩步:
1、 監管工作誰來做?例項的監管工作需要型別自己去做。
2、 監管工作如何做?型別如何保證例項唯一就是技術實現問題了,可以看到的版本有 執行緒安全的、雙重鎖定的、延遲初始化的等。
下面使用偽**逐步分析例項化工作放到型別內部的做法。
呼叫我,例項我給你
class
singleton
}你只管呼叫,我保證唯一
class
singleton
//例項化型別singleton,例項化時判斷型別有沒有被建立過,這樣就保證了例項的唯一
singletongetinstance()
return
instance;}}
你們都可以呼叫,我需要統計呼叫次數
class
singleton
//例項化型別singleton
singletongetinstance()
//例項化型別singleton,例項化時判斷型別有沒有被建立過,這樣就保證了例項的唯一
singletongetinstance()
return
instance;}//
例項化型別singleton,並且加入乙個計數器,這樣能知道例項化工作被執行了多少次
singletongetinstance()
return
instance;}}
想使用例項?請出示合法證件
class
singleton
//例項化型別singleton
singletongetinstance()
//例項化型別singleton,例項化時判斷型別有沒有被建立過,這樣就保證了例項的唯一
singletongetinstance()
return
instance;}//
例項化型別singleton,並且加入乙個計數器,這樣能知道例項化工作被執行了多少次
singletongetinstance()
return
instance;}//
例項化型別singleton,並且接收乙個合法的授權,這樣可以知道每個授權方的呼叫次數,使用頻率
singletongetinstance(
string
caller)
return
instance;
}else
return
null;}
//記錄呼叫方呼叫次數
public
void
callercount(
string
caller)
public
bool
check(
string
caller)
}歡迎一起討論!
--------------------------補充-------------------------------
我把幾種流行的 singleton 寫法發出來,省的大家再去查資料。
public
class
mysingleton
//簡單寫法
public
mysingletonistance
return
instance;}}
//執行緒安全
static
readonly
object
obj=
newobject
();public
mysingletonsafeinstance}}
//雙重鎖定節約開銷
public
mysingletonlockinstance
}return
instance;}}
//靜態初始化
static
mysingleton(){}
static
readonly
mysingletonstaticinstance
=new
mysingleton();
public
static
mysingletonstaticinstance}//
延遲初始化
public
static
mysingletonlazyinstance
}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模式用來保證乙個程序中只有乙個某型別的實體,也就是說程序中的多執行緒可能共享該實體。共享該實體是指共享該實...