【设计模式】单例模式
来源:互联网 发布:棋牌游戏算法 编辑:程序博客网 时间:2024/05/16 01:18
所谓单例模式,就是禁止用户代码实例化多个对象实例,保证单例对象的类只有一个实例存在。通过一个函数接口取用这个唯一实例,就能够控制对该实例的访问。UML图如下:
下面是一个用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。
0 0
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- 设计模式:单例模式
- 008_C语言基础部分
- 图论---POJ 3660 floyd 算法(模板题)
- http协议
- 线程基础
- PAT:4-3. 统计素数并求和(20)
- 【设计模式】单例模式
- Android NDK环境搭建
- (25)文档碎片
- windows下Jenkins的搭建
- 着手实现TFIDF算法
- Codeforces Round #256 (Div. 2) A. Rewards(简单题)
- PAT:4-4. 猜数字游戏(15)
- hdu 3635 Dragon Balls ( 并查集路径压缩)
- bzoj2150 部落战争