设计模式学习笔记(C++实现)(六)--单例模式

时间:2023-01-15 21:15:59

1.单例模式简介

  • 英文名称
    Singleton
  • 主要目的
    该模式用于保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
  • 使用场景
    1.当一个类只能有一个实例而且客户都可以从一个总所周知的访问点访问它时;
    2.当这个唯一的实例应该通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

2.单例模式代码示例

  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 代码说明
    Singleton–单例类;

    注意:
    1.Singleton为单例类,该类通过判断静态指针m_pInstance为空,来决定是否需要新建一个对象,从而保证只有一个实例;
    2.单例类通过 GetInstance()函数来提供一个全局访问点;
    3.该代码解决了网上部分单例模式代码无法编译通过的问题,可以在VS2015上正常编译和运行。

  • 具体代码

//单例类
class Singleton
{
private:
    static Singleton* m_pInstance;
    Singleton() {}
public:
    static Singleton* GetInstance();                      //获取单例对象
    static mutex m_Mutex;                                 //多线程互斥量 
};

Singleton* Singleton::m_pInstance = NULL;
mutex Singleton::m_Mutex;
Singleton* Singleton::GetInstance()
{
    Singleton* pRet = NULL;
    m_Mutex.lock();
    if (NULL == m_pInstance)
    {
        static Singleton singleInstance;
        m_pInstance = &singleInstance;
        pRet = m_pInstance;
    }
    else
    {
        pRet = m_pInstance;
    }
    m_Mutex.unlock();
    return m_pInstance;
}

int main()
{
    Singleton* pSingle1 = Singleton::GetInstance();
    Singleton* pSingle2 = Singleton::GetInstance();
    Singleton* pSingle3 = Singleton::GetInstance();

    cout << "pSingle1=" << pSingle1 << endl;
    cout << "pSingle2=" << pSingle2 << endl;
    cout << "pSingle3=" << pSingle3 << endl;

    getchar();
    return 0;
}
  • 输出结果
    设计模式学习笔记(C++实现)(六)--单例模式

栏目导航
上一篇:设计模式学习笔记(C++实现)(五)–原型模式
下一篇:设计模式学习笔记(C++实现)(七)–适配器模式

参考文献:
1.《设计模式:可复用面向对象软件的基础》