設計模式──Singleton(單例模式)

來源:互聯網
上載者:User

            作用:保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。
       
            解析:
            Singleton 模式其實是對全域靜態變數的一個取代策略,上面提到的 Singleton
            模式的兩個作用在 C++中是通過如下的機制實現的:1)僅有一個執行個體,提供一個
            類的靜態成員變數,大家知道類的靜態成員變數對於一個類的所有對象而言是惟
            一的 2)提供一個訪問它的全域訪問點,也就是提供對應的訪問這個靜態成員變
            量的靜態成員函數,對類的所有對象而言也是惟一的.在 C++中,可以直接使用類
            域進行訪問而不必初始化一個類的對象.
            下面的實現其實是 Singleton 的一個簡單實現,並不是特別的通用,一般的,如果
            一個項目中需要使用到 Singleton 模式比較多的話,那麼一般會實現一個 Singl
            eton 的模板類,模板類的模板參數是需要採用 Singleton 模式的類,比如這樣實
            現:
             template<typename T>
             class Singleton
               {
             //   .類的聲明
             };
             // 需要採用 singleton 模式的類
             class Test
                : public Singleton<Test>
               {
             //    類的聲明
             };
            但是,下面的實現還是採用最簡單的實現辦法,起的是示範的作用
            實現:
            1)Singleton.h
               /**************************************************************
            ******
                 created:     2006/07/20
                 filename:      Singleton.h
                 author:        李創
                           http://www.cppblog.com/converse/
                 purpose:     Singleton 模式的示範代碼
             ****************************************************************
            *****/
             #ifndef SINGLETON_H
             #define SINGLETON_H
             class Singleton
               {
             public:
                    Singleton(){};
                    ~Singleton(){};
                 // 靜態成員函數,提供全域訪問的介面
                 static Singleton* GetInstancePtr();
                 static Singleton GetInstance();
                 void Test();
             private:
                 // 靜態成員變數,提供全域惟一的一個執行個體
                 static Singleton* m_pStatic;
             };
             #endif
            2)Singleton.cpp
               /**************************************************************
            ******
                 created:     2006/07/20
                 filename:      Singleton.cpp
                 author:        李創
                           http://www.cppblog.com/converse/
                 purpose:     Singleton 模式的示範代碼
             ****************************************************************
            *****/
             #include "Singleton.h"
             #include <iostream>
             // 類的靜態成員變數要在類體外進行定義
             Singleton* Singleton::m_pStatic = NULL;
             Singleton* Singleton::GetInstancePtr()
               {
                 if (NULL == m_pStatic)
                    {
                     m_pStatic = new Singleton();
                 }
                 return m_pStatic;
             }
             Singleton Singleton::GetInstance()
               {
                 return *GetInstancePtr();
             }
             void Singleton::Test()
               {
                 std::cout << "Test!\n";
             }
            3)Main.cpp
               /**************************************************************
            ******
                 created:    2006/07/20
                 filename:     Main.cpp
                 author:       李創
                          http://www.cppblog.com/converse/
                 purpose:    Singleton 模式的測試代碼
             ****************************************************************
            *****/
             #include "Singleton.h"
             #include <stdlib.h>
             int main()
               {
                 // 不用初始化類對象就可以訪問了
                 Singleton::GetInstancePtr()->Test();
  Singleton::GetInstance().Test();
  system("pause");
  return 0;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.