首页 > 其他 > 详细

Charpter21 单例模式

时间:2020-03-30 11:13:42      阅读:58      评论:0      收藏:0      [点我收藏+]

单例模式简介

单例模式(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;
}

 

Charpter21 单例模式

原文:https://www.cnblogs.com/yb-blogs/p/12597238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!