創建型模式 單例模式
阿新 • • 發佈:2017-11-02
pri com 創建型模式 私有 變量 模式 靜態 分享 靜態方法
創建型模式 單例模式
/** * 創建型模式 單例模式 懶漢式 * GoF對單例模式的定義是:保證一個類、只有一個實例存在,同時提供能對該實例加以訪問的全局訪問方法。 * * 實現單例步驟常用步驟 * a) 構造函數私有化 * b) 提供一個全局的靜態方法(全局訪問點) * c) 在類中定義一個靜態指針,指向本類的變量的靜態變量指針 * */ #include <iostream> class Singelton { private: static Singelton * m_pls; Singelton() // 構造函數不是線程安全函數 { std::cout<< "Singelton 構造函數執行" << std::endl; } public: static Singelton *getInstance() { if (m_pls == nullptr) // 只有在使用的時候,才去創建對象。 1 每次獲取實例都要判斷 2 多線程會有問題 { m_pls = new Singelton; } return m_pls; } static Singelton *FreeInstance() {if (m_pls != nullptr) { delete m_pls; m_pls = nullptr; } return m_pls; } }; Singelton * Singelton::m_pls = nullptr; void mytest() { Singelton * p1 = Singelton::getInstance(); Singelton * p2 = Singelton::getInstance(); if (p1 == p2) { std::cout<< "是同一個對象" << std::endl; } else { std::cout << "不是同一個對象" << std::endl; } Singelton::FreeInstance(); return; } int main() { mytest(); system("pause"); return 0; }
/** * 創建型模式 單例模式 餓漢式 * GoF對單例模式的定義是:保證一個類、只有一個實例存在,同時提供能對該實例加以訪問的全局訪問方法。 * * 實現單例步驟常用步驟 * a) 構造函數私有化 * b) 提供一個全局的靜態方法(全局訪問點) * c) 在類中定義一個靜態指針,指向本類的變量的靜態變量指針 * */ #include <iostream> class Singelton { private: static Singelton * m_pls; Singelton() { std::cout << "Singelton 構造函數執行" << std::endl; } public: static Singelton *getInstance() { return m_pls; } static Singelton *FreeInstance() { if (m_pls != nullptr) { delete m_pls; m_pls = nullptr; } return m_pls; } }; // 餓漢式 // 不管你創建不創建實例,均把實例new出來 Singelton * Singelton::m_pls = new Singelton; void mytest() { Singelton * p1 = Singelton::getInstance(); Singelton * p2 = Singelton::getInstance(); if (p1 == p2) { std::cout << "是同一個對象" << std::endl; } else { std::cout << "不是同一個對象" << std::endl; } Singelton::FreeInstance(); return; } int main() { mytest(); system("pause"); return 0; }
創建型模式 單例模式