单例设计模式
单例设计模式
- 什么是设计 模式
- 单例设计模式
- 什么是单例设计模式
- 如何实现单例设计模式
- 单例设计模式的实现
- 懒汉式
- 饿汉式
- 单例设计模式的优缺点
什么是设计 模式
模式:套路 -----> 写代码的习惯
设计模式:前人总结具有代表性套路的模式
官方说法:它是一套被反复使用,多数人知晓,经过分类编目的,
代码设计经验的总结。设计模式的究极目标:通过增加的形式去减少因为变化而要修改源码的问题(维护问题)
单例设计模式
什么是单例设计模式
保证整个类的使用只有一个对象
例如:
1.多线程网络资源初始化
2.回收站机制
3.任务管理器
4.日志管理
如何实现单例设计模式
1.构造函数私有化
2.提供一个全局的静态方法,访问唯一对象
3.类中定义一个静态指针,指向唯一对象
单例设计模式的实现
有2种方式
1.懒汉式
2.饿汉式
懒汉式
在类中创建一个对象
//单例设计模式
#include<iostream>
#include<string>
using namespace std;
class singleton
{
public:
//类中定义一个静态指针,指向唯一对象
static singleton* m_singleton;
//提供一个全局的静态方法,访问唯一对象
static singleton* get()
{
if (m_singleton == NULL)
{
m_singleton = new singleton;
return m_singleton;
}
}
private:
singleton()
{
cout << "构造对象" << endl;
m_singleton = nullptr;
}
};
singleton* singleton :: m_singleton = nullptr; //静态成员需要类外初始化
int main()
{
singleton* p1 = singleton::get(); //静态成员的访问,不需要对象,但是要加类名限定
cout << "p1 = " << p1 << endl;
singleton* p2 = singleton::get();
cout << "p2 = " << p2 << endl;
singleton* p3 = singleton::get();
cout << "p3 = " << p3 << endl;
return 0;
}
如果所示,p2与p3的地址是一样的,单例设计模式只有唯一的一个对象
但其实按理说我觉得3个的地址都应该一样
可能是我写错了,或者说对这单例设计模式还有不知道的细节,先暂时就这样
饿汉式
饥不择食,不管用不用,在全局中创建一个对象
饿汉式跟懒汉式的代码区别不大
#include<iostream>
#include<string>
using namespace std;
class singleton
{
public:
//类中定义一个静态指针,指向唯一对象
static singleton* m_singleton;
//提供一个全局的静态方法,访问唯一对象
static singleton* get()
{
return m_singleton;
}
private:
singleton()
{
cout << "构造对象" << endl;
m_singleton = nullptr;
}
};
singleton* singleton::m_singleton = new singleton;
int main()
{
singleton* p1 = singleton::get(); //静态成员的访问,不需要对象,但是要加类名限定
cout << "p1 = " << p1 << endl;
singleton* p2 = singleton::get();
cout << "p2 = " << p2 << endl;
singleton* p3 = singleton::get();
cout << "p3 = " << p3 << endl;
return 0;
}
当然这里饿汉式就正常了,三个地址一样,说明单例设计模式,只能有一个唯一对象
单例设计模式的优缺点
优点:
1.内存只有一个对象,节省内存空间
2.避免频繁创建和销毁对象,提高性能
3.避免对共享的资源多重占用,简化访问
缺点:
1.不适合变化频繁的对象
2.长时间不使用对象,导致系统回收掉