ACE中的設計模式 1 Singleton

2021-04-09 07:25:56 字數 2455 閱讀 9358

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

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

type, class

ace_lock>

class

ace_singleton : public

ace_cleanup

;

b)

看一下instance的實現:

template

type, class

ace_lock> type *

ace_singleton

::instance (void)

}

return &singleton->instance_;

}

說明:double-check技術主要是解決執行緒安全問題,避免在初始化時多執行緒重入,導致instance被例項化兩次。 c)

再看一下instance_i的實現:

template

type, class

ace_lock> ace_singleton

*&

ace_singleton

::instance_i (void)

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。乙個類最好只有乙...