有過面試經驗的朋友,或者對設計模式有點熟悉的朋友,都會對單件模式不陌生。對很多面試官而言,單件模式更是他們面試的保留項目。其實,我倒認為,單件模式算不上什麼設計模式。最多也就是個技巧。
單件模式要是用C++寫,一般這麼寫。
- #include <string.h>
- #include <assert.h>
-
- class object
- {
- public:
- static class object* pObject;
-
- static object* create_new_object()
- {
- if(NULL != pObject)
- return pObject;
-
- pObject = new object();
- assert(NULL != pObject);
- return pObject;
- }
-
- private:
- object() {}
- ~object() {}
- };
-
- class object* object::pObject = NULL;
單件模式的技巧就在於類的構造函數是一個私有的函數。但是類的構造函數又是必須創建的?怎麼辦呢?那就只有動用static函數了。我們看到static裡面調用了構造函數,就是這麼簡單。
- int main(int argc, char* argv[])
- {
- object* pGlobal = object::create_new_object();
- return 1;
- }
上面說了C++語言的編寫方法,那C語言怎麼寫?其實也簡單。大家也可以試一試。
- typedef struct _DATA
- {
- void* pData;
- }DATA;
-
- void* get_data()
- {
- static DATA* pData = NULL;
-
- if(NULL != pData)
- return pData;
-
- pData = (DATA*)malloc(sizeof(DATA));
- assert(NULL != pData);
- return (void*)pData;
- }