• 【设计模式】单例模式


    所谓单例模式,就是禁止用户代码实例化多个对象实例,保证单例对象的类仅仅有一个实例存在。通过一个函数接口取用这个唯一实例,就可以控制对该实例的訪问。以下是一个用C++编写的模拟单例模式的样例。

    #include <iostream>
    #include <string>
    
    using namespace std;
     
    class Singleton {
    public:
        Singleton() : m_str("Hello world!")
        {}
     
        string Get()
        {
            return m_str;
        }
        void Set(const string &rhs)
        {
            m_str = rhs;
        }
    private:
        string m_str;
    };
     
    // 当getInstance没有被调用时,静态对象single不会被实例化
    Singleton& getInstance()
    {
        static Singleton single;    // static对象保证仅仅有一个实例
        return single;
    }
     
    int main()
    {
        Singleton single1 = getInstance();
     
        cout << single1.Get() << endl;
        single1.Set("My test!");
     
        Singleton single2 = getInstance();
        cout << single1.Get() << endl;
     
        system("pause");
        return 0;
    }

    执行结果:



    在上面的样例中,我在getInstance函数内部定义了一个静态对象single,这样就抑制了多个Singleton实例的生成。当用户代码没有调用getInstance函数时,single对象不会被实例化;当用户代码第一次调用getInstance函数时,实例化一个新的single对象并返回给用户程序;当用户代码再次调用getInstance函数时,仅仅会返回原有的那个single对象,从而达到单例模式的效果。在main函数中,single1和single2获得的是同一个对象实例,所以对single1对象的改动会反应到single2对象身上。注意,上述代码在多线程环境下是不安全的。能够使用相互排斥锁解决该问题。

    參考:

    《Effective C++》条款04。

  • 相关阅读:
    获取客户及登录IP(Java)
    js初步
    数组方法
    BOM ;浏览器对象模型
    js事件
    EventListener()
    JS面向对象
    正则表达式
    -CSS盒模型和float
    EventListener()
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3885538.html
Copyright © 2020-2023  润新知