• Singleton 单例模式


    意图

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

    动机

    让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求) ,并且它可以提供一个访问该实例的方法。这就是Singleton模式。

    适用性

    • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
    • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

    结构

    参与者

    定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作(即Smalltalk中的一个类方法和C + +中的一个静态成员函数) 

    协作

    客户只能通过Singleton的Instance操作访问一个Singleton的实例

    实现

    #include <iostream> 
    using namespace std;
    
    class Singleton
    {
    public:
        static Singleton * Instance();
        static void Destroy();
        void sayHello(){ cout << "hello" << endl; }
    protected:
        Singleton();
    private:
        static Singleton *m_pInstance;
    };
    
    Singleton * Singleton::m_pInstance = NULL;
    
    Singleton * Singleton::Instance()
    {
        if (m_pInstance == NULL)
            m_pInstance = new Singleton;
        return m_pInstance;
    }
    
    void Singleton::Destroy()
    {
        delete m_pInstance;
        m_pInstance = NULL;
    }
    
    Singleton::Singleton(){}
    
    int main()
    {
        Singleton::Instance()->sayHello();        //直接调用静态函数
        Singleton *p_s1 = Singleton::Instance();
        Singleton *p_s2 = Singleton::Instance();
        if (p_s2 == p_s1)
            cout << "same" << endl;        //输出same验证确实是单例
        else
            cout << "diff" << endl;
        system("pause");
    }

    要点:注意构造函数是保护性,试图直接实例化Singleton的客户将得到一个编译时的错误信息,这样就保证了仅有一个实例可以被创建

    另外一篇关于Singleton的好文章:

    http://www.cnblogs.com/loveis715/archive/2012/07/18/2598409.html

    http://www.cnblogs.com/liyuan989/p/4264889.html

  • 相关阅读:
    线性回归与梯度下降法[二]——优化与比较
    matlab基础教程——根据Andrew Ng的machine learning整理
    dapper-dot-net用法及其扩展系列
    线性回归与梯度下降法[一]——原理与实现
    浅析 if __name__ == "__main__":
    Python中集合数据类型之间的'交'、'差'、'并'、'补'的表达方式
    Python中 'is' 跟 '==' 的区别
    Python中的逻辑运算符:'and'与'or'的用法
    Python2跟Python3的区别
    编程语言分类及区别
  • 原文地址:https://www.cnblogs.com/raichen/p/5617632.html
Copyright © 2020-2023  润新知