2020年9月4日 星期五

設計 Singleton 模式的插件

這裡的插件是指 CxxlMan2 程式庫的 cxxlObjectPlugin 插件,cxxlObjectPlugin 插件有一個特性,當某個 DLL 檔所提供的所有 cxxlObjectPlugin 物件已無使用者時,這個  DLL 檔就會被卸載。

但 DLL 檔提供的物件若是一般的 Singleton 模式物件,那麼永遠都會有一個不能放棄的持有記錄,即使已無持有者了,這個 DLL 檔也永遠卸不掉。這時可藉由 LifeCustody 這個工具的幫忙,就可以解決這問題。

因要設計成 DLL 和 使用端 兩部份,所以直接提供範例原始檔:
SingletonExample.zip

要編譯這範例須先如下的東東:

  1. CxxlMan2 程式庫 - 抓最版,順便說明檔也一起抓吧
  2. CMRegSelf 插件註冊輔助 - 內附說明
  3. LifeCustody 物件終結插件 - 內附說明

範例有提供 CMake 的支援,編譯不會很難

大致說一下這個範例,test.cpp 定義了兩個 class Input 及 class Output,建立後會各別由 DLL 插件取得 ISingleton 物件,因取得的 ISingleton 是同一個物件,所以 Input::PutStr() 輸入的文字可以由 Output::GetStr() 取出。當兩個 Input 及 Output 物件銷毀時也會通知 DLL 插件銷毀 ISingleton 物件。