简介

单例模式只允许一个类有一个实例化。其应用比较广泛,很多情况下我们只需要一个对象。主要要点是:构造函数私有,包含指向该类的静态成员指针,实例化的静态函数。实现时为了保证只有一个实例,需要使用锁保证同步,或者初始化全局变量等技术保证唯一实例。我们只实现使用锁的方法。

UML类图

clipboard.png

示例

单例模式在实际应用中很常见,很多时候我们只需要实例化一个对象出来。
单例类,product.h

#ifndef PRODUCT_H
#define PRODUCT_H
#include "boost/thread/mutex.hpp"
#include "boost/thread/shared_mutex.hpp"

class CProduct
{
public:
    static CProduct* GetInstance()
    {
        if(m_pProduct == NULL)
        {
            boost::shared_lock<boost::shared_mutex> lock(m_mutexProduct);
            if(m_pProduct == NULL)
                m_pProduct = new CProduct;
        }
        return m_pProduct;
    }
private:
    CProduct(){};
private:
    static CProduct* m_pProduct;
    static boost::shared_mutex m_mutexProduct;
};
#endif

客户端调用,main.cpp

#include "product.h"

#define SAFE_DELETE(p) if(p){delete (p); (p) = NULL;}
 boost::shared_mutex CProduct::m_mutexProduct;
 CProduct* CProduct::m_pProduct = NULL;

int main(int argc, char* argv[])
{
    CProduct* pProduct = CProduct::GetInstance();
    
    SAFE_DELETE(pProduct)
    return 0;
}

one_piece
26 声望8 粉丝

« 上一篇
原型模式
下一篇 »
适配器模式