ace
中的設計模式
(1)——
singleton
joise.li @ 2006-9-29,fyt04121
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
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
type, class
ace_lock>
class
ace_singleton : public
ace_cleanup
;
b)
看一下instance的實現:
template
type, class
ace_lock> type *
ace_singleton
}
return &singleton->instance_;
}
說明:double-check技術主要是解決執行緒安全問題,避免在初始化時多執行緒重入,導致instance被例項化兩次。 c)
再看一下instance_i的實現:
template
type, class
ace_lock> ace_singleton
ace_singleton
4.
題外話:
ace_singleton
較好的封裝了
singleton
模式,對於現代應用系統,一般而言會有相當多的地方需要使用
singleton
模式,如執行緒池、記憶體池、資料連線池等,通過
ace_singleton
類,可以達到簡化**的目的,同時解決
gof聖經中未提的執行緒安全的問題。後續我會繼續就
ace中的使用的設計模式提出來與大家進行**、學習。
5.作者相關資訊:
ACE中的設計模式
1 singleton 模式簡介 singleton 是gof 聖經中最簡單的乙個模式了,主要用於建立在系統中具有唯一例項又需要到處使用的類,實現起來非常簡單。include using namespace std class my singleton my singleton my singlet...
ACE中的reactor模式學習
這兩天在學習c 網路程式設計卷二,第二章開始講到reactor模式,這兩天結合書上的例子,寫了個簡單的echo server端程式,如下 include include include include include include include include include include i...
設計模式的學習1
看了設計模式,到現在也該是處出貨時候了。首先必須明確設計模式的位置,它是在需求分析 use case 後,系統分析結束之後,設計時進行的。往往設計模式會帶來乙個問題 過度設計。因為設計模式要求增加類。同時我們看到他也不是萬靈藥,他受前期需求以及系統分析的影響。關鍵有以下幾點原則 1。乙個類最好只有乙...