单例模式

59次阅读

共计 845 个字符,预计需要花费 3 分钟才能阅读完成。

简介

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

UML 类图

示例

单例模式在实际应用中很常见,很多时候我们只需要实例化一个对象出来。
单例类,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;
}

正文完
 0

单例模式

59次阅读

共计 179 个字符,预计需要花费 1 分钟才能阅读完成。

单例模式具有的特性

 一个类仅能够实例化一次。

单例模式的实现方式

   使用枚举实现单例模式:

public enum SingletonMode {
    INSTANCE;

    Resource resoure;

    SingletonMode() {this.resoure = new Resource();
    }

    public Resource getResoure() {return resoure;}
}

正文完
 0