Charpter21 单例模式

单例模式简介

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

通常我们可以让一个全局变量使的一个对象被访问,但它不能防止你实例化多个对象。一个最好的方法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一份访问该实例的方法。

单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问。

多线程的单例,需要用lock确保当一个线程位于代码的临界区时,另一个线程不能进入临界区。如果其他线程进入锁定的临界区,则它将一直等待,直到该锁被释放。

单例模式UML类图

C++代码实现

// Singleton类
#ifndef _SINGLETON_HPP 
#define _SINGLETON_HPP 

class Singleton{
public:
    static Singleton* getInstance(){
        if(nullptr == pInstance) {
            pInstance= new Singleton();
        }
        return pInstance;
    }
private:
    Singleton(){};
    static Singleton* pInstance;
};

Singleton* Singleton::pInstance = nullptr; // cpp 静态变量不允许类内初始化,必须类外。

#endif
// 客户端程序
#include<iostream>
#include"singleton.hpp"

using namespace std;

int main(){
    Singleton* p1 = Singleton::getInstance();   
    Singleton* p2 = Singleton::getInstance();   

    if(p1 == p2 && p1){
        cout << "p1 and p2 pointers to the same instance which is not null"<<endl;
    }

    getchar();
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yb-blogs/p/12597238.html