Qt設(shè)計(jì)模式:單實(shí)例

基本思想

  1. 私有化類的構(gòu)造函數(shù),作用:不允許在棧上創(chuàng)建對(duì)象或使用new操作符創(chuàng)建對(duì)象;
  2. 通過(guò)靜態(tài)公有方法,如命名為:getInstance()獲取對(duì)象實(shí)例;
  3. 確保類對(duì)象只被初始化一次,類成員具有全局唯一性。

優(yōu)點(diǎn)和用途

  1. 常用于程序的全局配置;
  2. 常用于程序引擎類;
  3. 用于數(shù)據(jù)的存儲(chǔ),保證數(shù)據(jù)的唯一性;
  4. 單實(shí)例對(duì)象同其他類成員的耦合性低,在包含單實(shí)例頭文件的源代碼文件中,通過(guò)單實(shí)例類名和作用域符號(hào)即可調(diào)用靜態(tài)公有方法getInstance()來(lái)獲取單實(shí)例對(duì)象,而不用把單實(shí)例對(duì)象設(shè)置為其他類的成員;調(diào)用單實(shí)例對(duì)象的公有靜態(tài)方法一般命名為getInstance(),該函數(shù)返回單實(shí)例對(duì)象指針。

示例代碼

engine.h

#ifndef ENGINE_H
#define ENGINE_H

#include <QObject>
class Engine : public QObject
{
    Q_OBJECT
public:
    //公有靜態(tài)函數(shù)
    static Engine* getInstance();
    void doSomething();
private:
    //私有構(gòu)造函數(shù)
    explicit Engine(QObject *parent = 0);
private:
    static Engine* m_engine;
    Q_DISABLE_COPY(Engine)//聲明拷貝構(gòu)造函數(shù)和賦值操作符運(yùn)算為私有
};

#endif // ENGINE_H

engine.cpp

#include "engine.h"
#include <QDebug>
Engine* Engine::m_engine = NULL;//類外初始化靜態(tài)成員
static QMutex mutex;
Engine::Engine(QObject *parent): QObject(parent)
{
}
void Engine::doSomething()
{
    qDebug()<<__LINE__<<__FUNCTION__;
}
Engine *Engine::getInstance()
{
    if(m_engine == NULL)
    {
        QMutexLocker locker(&mutex);//確保線程安全
        if(m_engine == NULL)
        {
            m_engine = new Engine();
        }
    }
    return m_engine;
}

使用方法

在程序需要用到Engine對(duì)象實(shí)例的地方,按如下方式調(diào)用單實(shí)例對(duì)象的方法即可。

Engine::getInstance()->doSomething();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 設(shè)計(jì)模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時(shí)需要注意以下幾點(diǎn):a) 高內(nèi)聚、低耦合和單一職能的“沖突”實(shí)際上,這兩者...
    彥幀閱讀 3,896評(píng)論 0 14
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,680評(píng)論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,271評(píng)論 8 265
  • 仿佛高中就在昨日,原來(lái)昨日是最想念的日子,是最遙遠(yuǎn)的距離。我真的老了。
    下雨天小心情閱讀 228評(píng)論 0 0
  • 一起吃飯吧(一)傳送門:【青春】一起吃飯吧(一) - 簡(jiǎn)書
    程郁柒閱讀 231評(píng)論 0 0

友情鏈接更多精彩內(nèi)容