设计模式:单例模式

Posted k5bg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式:单例模式相关的知识,希望对你有一定的参考价值。

一.作用

  • 不能通过构造函数构造,否则就能够实例化多个,构造函数需要私有声明
  • 保证只能产生一个实例

用处:比如程序只能有一个日志系统,只能有一个管理器等

 

二.简单式

  • 直接在类里面进行生成静态对象,但是这样可能会释放多次
  • 饿汉:需要开辟内存
class CSingleton

public:
    static CSingleton* GetInstance()
        if(m_pInstance==NULL)              //m_pInstance==nullptr
            m_pInstance=new CSingleton();
        
        return m_pInstance;
    

private:
    CSingleton()
    ~CSingleton()
        if(Singleton::local_instance!=nullptr)
            delete Singleton::local_instance;
        
    
    static CSingleton* m_pInstance;

;

CSingleton* CSingleton::m_pInstance=NULL;


//或者
class CSingleton

public:
    static CSingleton* GetInstance()
        return m_pInstance;
    

private:
    CSingleton()
    ~CSingleton()
        if(Singleton::local_instance!=nullptr)
            delete Singleton::local_instance;
        
    
    static CSingleton* m_pInstance;

;

 CSingleton* CSingleton::m_pInstance=new CSingleton();;
//调用
CSingleton* p1=CSingleton::GetInstance();
CSingleton* p2=CSingleton::GetInstance();
//p1和p2地址一样

 

三.完整式

  • 在多线程下可能会new两次,所以直接返回静态对象的地址,就不用开辟内存释放
  • 懒汉:没有内存操作
class Singleton

private:
    static Singleton* local_instance;

    Singleton()
    ~Singleton()

public:
    static Singleton* getInstance()
        static Singleton local;
        return &local;
    

        //或者
        static Singleton& getInstance()
                static Singleton local;
                return local;
        

;
//调用
Singleton* p1=Singleton::getInstance();
Singleton* p2=Singleton::getInstance();
//p1和p2地址一样

 

以上是关于设计模式:单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式单例模式精讲(上)

单例模式(单例设计模式)详解

单例模式(饿汉式单例模式与懒汉式单例模式)

设计模式之单例模式

什么是单例设计模式

Java设计模式-单例模式