介紹MFC框架中涉及到的設計模式(二)
接著上一篇《介紹MFC框架中涉及到的設計模式(一)》介紹
單例模式(Singleton Pattern)
單例模式是一種經常使用的軟件設計模式。在它的核心結構中僅僅包括一個被稱為單例類的特殊類。通過單例模式能夠保證系統中一個類僅僅有一個實例並且該實例易於外界訪問。從而方便對實例個數的控制並節約系統資源。
假設希望在系統中某個類的對象僅僅能存在一個,單例模式是最好的解決方式。
單例模式的要點有三個: 1.某個類僅僅能有一個實例;
2.它必須自行創建這個實例;
3.它必須自行向整個系統提供這個實例。
單例模式典型的結構圖例如以下所看到的:
由上圖我們能夠了解到,我們通過維護一個static成員變量來記錄這個唯一的對象實例。通過一個Instance()接口來獲得這個唯一的實例。
以下是一個用C++語言實現的Singleton模式的小樣例幫助大家理解單例模式。註意(VC6.0能夠執行)
代碼片斷1:Singleton.h //Singleton.h #ifndef _SINGLETON_H_ #define _SINGLETON_H_ #include <iostream> using namespace std; class Singleton { public: static Singleton* Instance(); //獲取唯一實例對象的接口 protected: Singleton(); //防止被外界調用實例化。也能夠聲明成private private: static Singleton* _instance; //保存唯一的實例對象 }; #endif //~_SINGLETON_H_ 代碼片斷2:Singleton.cpp //Singleton.cpp #include "Singleton.h" #include <iostream> using namespace std; Singleton* Singleton::_instance = 0; Singleton::Singleton() { cout<<"Singleton...."<<endl; } Singleton* Singleton::Instance() { if (_instance == 0) { _instance = new Singleton(); } return _instance; } 代碼片斷3:main.cp //main.cpp #include "Singleton.h" #include <iostream> using namespace std; int main(int argc,char* argv[]) { Singleton* sgn = Singleton::Instance(); return 0; }
我們來看一下MFC中有關的單例模式。
每個MFC應用實例都派生於類CWinApp。每個應用程序都僅僅應該有一個派生於CwinApp的實例。CwinApp在設計上保證了一個應用程序不能生成多個實例,而且提供了一系列的函數用於對該唯一對象的一些屬性的訪問,包含AfxGetApp。AfxGetInstanceHandle,AfxGetResourceHandle,AfxGetAppName等作為獲取唯一實例對象的接口。
MFC是通過ASSERT來防止多次構造CWinApp對象的。在第二次構造CwinApp對象時。ASSERT內的表達式為假,將會彈出錯誤提示。
介紹MFC框架中涉及到的設計模式(二)