<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                **定義**:單例模式(SingletonPattern),保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。 類型:創建型模式 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6abd31cbe8.jpg) **概述**: ??????在很多比較大型的程序中,全局變量經常被用到。如果不用全局變量,那么在使用到的模塊中,都需要用參數將全局變量傳入,這是非常麻煩的。雖然要減少使用全局變量,但是如果需要,還是要用。單例模式就是對傳統的全局的一種改進。單例可以做到延時實例化,即在需要的時候才進行實例化。針對一些大型的類,延時實例化是有好處的。 ?????需要注意的是,在C#,Java中,有餓漢單例模式(即在聲明變量的時候就初始化)和懶漢模式(在需要使用的時候再初始化)。而在GoF的書中,只講到了懶漢模式,這是因為C++的靜態變量在初始化時具有不確定性。同一個類中的靜態變量初始化與其聲明順序一致,但是不同類中的靜態變量初始化順序卻是不確定的。 ?????另外在多線程中,需要注意訪問的臨界區,需要加Lock用以控制。 代碼:添加了一個靜態對象用來處理內存垃圾回收。 ~~~ //?C++ class?CSingleton { ???//?私有構造函數,不被允許直接構造對象 private: ???CSingleton() ???{ ???} public: ???static?CSingleton*?GetInstance() ???{ ???????if?(NULL?==?m_pSingleton) ???????????m_pSingleton?=?new?CSingleton(); ???????return?m_pSingleton; ???} ???void?SetIdx(int?_nIdx) ???{ ???????m_nIdx?=?_nIdx; ???} ???int?GetIdx() ???{ ???????return?m_nIdx; ???} private: ???int?m_nIdx; ???static?CSingleton*?m_pSingleton; public: ???class?CRecycle ???{ ???public: ???????~CRecycle() ???????{ ???????????if?(NULL?!=CSingleton::m_pSingleton) ???????????{ ???????????????deleteCSingleton::m_pSingleton; ???????????} ???????} ???}; ???static?CRecycle?m_recycle; }; //?靜態成員變量的初始化 CSingleton*CSingleton::m_pSingleton?=?NULL; CSingleton::CRecycleCSingleton::m_recycle; int?_tmain(int?argc,_TCHAR*?argv[]) { ???CSingleton::GetInstance()->SetIdx(1); ? return0; } ~~~ 優缺點: 1. 優點,能夠靈活地控制什么時候去訪問。 1. 缺點,和其他模塊耦合性太強,作為全局變量的通病。 參考資料: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《Java與模式》 1. 《大話設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看