码迷,mamicode.com
首页 > 其他好文 > 详细

【设计模式】单例模式

时间:2014-07-19 08:17:48      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   使用   os   width   

所谓单例模式,就是禁止用户代码实例化多个对象实例,保证单例对象的类只有一个实例存在。通过一个函数接口取用这个唯一实例,就能够控制对该实例的访问。下面是一个用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;
}

运行结果:

bubuko.com,布布扣

bubuko.com,布布扣

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

参考:

《Effective C++》条款04。

【设计模式】单例模式,布布扣,bubuko.com

【设计模式】单例模式

标签:style   blog   http   使用   os   width   

原文地址:http://blog.csdn.net/nestler/article/details/37938155

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!