单例模式

来源:互联网 发布:tiu网络用语什么意思 编辑:程序博客网 时间:2024/06/05 05:21

简介

单例模式:

保证一个类有且只有一个实例,并提供一个访问它的全局访问点。

常用的场景

单例模式常常与工厂模式结合使用,因为工厂只需要创建产品实例就可以了,在多线程的环境下也不会造成任何的冲突,因此只需要一个工厂实例就可以了。

优点:

1.减少了时间和空间的开销(new实例的开销)。

2.提高了封装性,使得外部不易改动实例。

缺点:

1.懒汉式是以时间换空间的方式。

2.饿汉式是以空间换时间的方式。

注意点:

单例模式根据是否是线程安全分为两种:

懒汉式:在类中定义static对象,在instance时判断是否new多线程时无法保证pData == NULL)只生成一个对象,线程不安全。

饿汉式:在全局初始化类对象。

测试代码

 

#include <iostream>#include <assert.h>#include <vector>using namespace std;#include <string>#include <list>//线程锁class Lock{};//懒汉线程不安全class FLHanSinglen{private:FLHanSinglen(){m_pInstance = NULL;};~FLHanSinglen(){};static FLHanSinglen* m_pInstance ;public:FLHanSinglen* getInstance(){if( m_pInstance == NULL ){m_pInstance = new FLHanSinglen();}return m_pInstance;}};//懒汉线程安全class FLAHanSinglen{private:FLAHanSinglen(){m_pInstance = NULL;};~FLAHanSinglen(){};static FLAHanSinglen* m_pInstance ;public:static FLAHanSinglen* getInstance(){if(m_pInstance == NULL){Lock lock;if( m_pInstance == NULL ){m_pInstance = new FLAHanSinglen();}}return m_pInstance;}};//饿汉模式  都是线程安全 无内存泄露class FEHanSinglen{private:FEHanSinglen(){};~FEHanSinglen(){if(m_pInstance != 0){delete m_pInstance;}m_pInstance = 0;};static FEHanSinglen* m_pInstance;public:static FEHanSinglen* getInstance(){return m_pInstance;}}; FEHanSinglen* FEHanSinglen::m_pInstance = new FEHanSinglen();void main(){FEHanSinglen::getInstance();}

原创粉丝点击