1
.singleton
模式簡介
singleton
是gof
聖經中最簡單的乙個模式了,主要用於建立在系統中具有唯一例項又需要到處使用的類,實現起來非常簡單。
#include
using
namespace
std;
class
my_singleton
;my_singleton
*my_singleton
::m_instance
=null
my_singleton
*my_singleton
::instance
()return
m_instance;}
void
my_singleton
::show_my_life
()my_singleton
::my_singleton
(){}
my_singleton
::~my_singleton()}
intmain();
2.ace中如何使用
singleton
如上例中,
singleton
**非常簡單,也很成熟,但是如果在乙個系統中有很多地方都需要使用
singleton
模式,則需要寫相當多的類似重複**,枯燥且低效,如果碰巧使用了
ace,那麼使用
ace封裝的
singleton
,則可以更加簡單:
class
normal_test
;normal_test
::normal_test
(){}
typedef
ace_singleton
<
normal_test
,ace_null_mutex>
normal_test
;void
normal_test
::show_my_life
()int
ace_tmain
(int
argc
,ace_tchar
*argv);
如上所示,獲得了以下優點:1.
**減少了一半還多,變得更加簡潔、清晰,2.
使用了double
-check
技術,免費的獲得了執行緒安全。3.
沒有使用繼承、虛函式,效能、效率不會受影響。3.
ace的
singleton
是如何實現的?
以下**節選自
ace的源**,為清晰起見,去除了一些無關的巨集開關a)
以下是ace_singleton
的定義:
template
<
class
type
,class
ace_lock>
class
ace_singleton
:public
ace_cleanup;b
)看一下
instance
的實現:
template
<
class
type
,class
ace_lock>
type
*ace_singleton
<
type
,ace_lock>
::instance
(void)}
return
& singleton
->
instance_;}
說明:double
-check
技術主要是解決執行緒安全問題,避免在初始化時多執行緒重入,導致
instance
被例項化兩次。c)
再看一下
instance_i
的實現:
template
<
class
type
,class
ace_lock>
ace_singleton
<
type
,ace_lock> *&
ace_singleton
<
type
,ace_lock>
::instance_i
(void)4
.題外話:
ace_singleton
較好的封裝了
singleton
模式,對於現代應用系統,一般而言會有相當多的地方需要使用
singleton
模式,如執行緒池、記憶體池、資料連線池等,通過
ace_singleton
類,可以達到簡化**的目的,同時解決
gof聖經中未提的執行緒安全的問題。後續我會繼續就
ace中的使用的設計模式提出來與大家進行**、學習。
ACE中的設計模式 1 Singleton
ace 中的設計模式 1 singleton joise.li 2006 9 29,fyt04121 1.singleton 模式簡介 singleton 是gof 聖經中最簡單的乙個模式了,主要用於建立在系統中具有唯一例項又需要到處使用的類,實現起來非常簡單。include using names...
漫談ACE與設計模式
說起c 的系統和網路程式設計開源庫,恐怕沒有人敢否認 ace的王者地位。其實 ace不光是乙個實用的程式庫和框架集,它更是乙個設計模式的典範應用。ace具有極其明顯的分層體系結構,一般劃分為三個層次 1.作業系統適配層 2.c 包裝層3.構架和模式層 前面的兩層都是對各個平台的底層 os api 進...
ACE中的reactor模式學習
這兩天在學習c 網路程式設計卷二,第二章開始講到reactor模式,這兩天結合書上的例子,寫了個簡單的echo server端程式,如下 include include include include include include include include include include i...