网站首页 > 技术文章 正文
单例模式
概念:
单位模式是一种对象创建型模式,使用单位模式可以保证为一个位置生存唯一的实例对象。也就是说,在整个程序空间中,该位置存在一个实例对象
在应用系统开发中,我们常常有以下需求:
在多个线程之间,比如初始化一次socket资源,比如servlet环境,共享同一个资源,或者操作同一个对象
在整个程序空间使用全局变量,共享资源
大规模系统中为了性能的考虑,需要节省对象的创建时间等等
因为singletion模式可以保证为一个位置生成唯一的实例对象,所以这些情况singletion模式就派上用场了
实现单例的常用步骤
构造函数私有化
提供一个全局的静态方法
在类中定义一个静态指针,指向本类的变量的静态变量指针
单例-懒汉式
#include<iostream>
using namespace std;
class SingeLton
{
private:
SingeLton()
{
cout << " SingeLton构造函数 " << endl;
}
public:
static SingeLton *getInstance()
{
if (m_psl == NULL)
{
m_psl = new SingeLton;
}
return m_psl;
}
static void FreeInstance()
{
if (m_psl != NULL)
{
delete m_psl;
m_psl = NULL;
}
}
private:
static SingeLton *m_psl;
};
SingeLton*SingeLton::m_psl = NULL;//对静态变量初始化的方法要放在类的外面
void main11()
{
SingeLton*p1 = SingeLton::getInstance();
SingeLton*p2 = SingeLton::getInstance();
if (p1 == p2)
{
cout << "是同一个对象 " << endl;
}
else
{
cout << "不是同一个对象 " << endl;
}
SingeLton::FreeInstance();
return;
}
void main()
{
main11();
cout << "hello.." << endl;
system("pause");
return;
}
单例_饿汉式
#include<iostream>
using namespace std;
class SingeLton
{
private:
SingeLton()
{
cout << " SingeLton构造函数 " << endl;
}
public:
static SingeLton *getInstance()
{
return m_psl;
}
static void FreeInstance()
{
if (m_psl != NULL)
{
delete m_psl;
m_psl = NULL;
}
}
private:
static SingeLton *m_psl;
};
SingeLton*SingeLton::m_psl = new SingeLton;
void main11()
{
SingeLton*p1 = SingeLton::getInstance();
SingeLton*p2 = SingeLton::getInstance();
if (p1 == p2)
{
cout << "是同一个对象 " << endl;
}
else
{
cout << "不是同一个对象 " << endl;
}
SingeLton::FreeInstance();
return;
}
void main()
{
main11();
cout << "hello.." << endl;
system("pause");
return;
}
- 上一篇: C++设计模式——单例模式
- 下一篇: 23种设计模式之---单例模式(c++)
猜你喜欢
- 2024-09-24 学习C++之良好的编程习惯与编程要点
- 2024-09-24 大一萌新看过来,“这样”学C++,让你不再迷茫
- 2024-09-24 学习单例模式引发的思考
- 2024-09-24 C++中相互依赖的全局变量初始化策略
- 2024-09-24 零基础学习C++
- 2024-09-24 c++的面试总结
- 2024-09-24 避免踩坑,C++常见面试题的分析与解答
- 2024-09-24 20道必须掌握的C++题,纸上谈兵惯用伎俩
- 2024-09-24 C++11魔法静态变量magic static
- 2024-09-24 C++11 中值得关注的几大变化
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)