ACE中的設計模式

2021-04-29 16:55:29 字數 2478 閱讀 4857

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...