> 文章列表 > 单例设计模式

单例设计模式

单例设计模式

单例设计模式

  • 什么是设计 模式
  • 单例设计模式
  • 什么是单例设计模式
  • 如何实现单例设计模式
    • 单例设计模式的实现
      • 懒汉式
      • 饿汉式
  • 单例设计模式的优缺点

什么是设计 模式

模式:套路 -----> 写代码的习惯
设计模式:前人总结具有代表性套路的模式
官方说法:它是一套被反复使用,多数人知晓,经过分类编目的,
代码设计经验的总结。

设计模式的究极目标:通过增加的形式去减少因为变化而要修改源码的问题(维护问题)

单例设计模式

什么是单例设计模式

保证整个类的使用只有一个对象
例如:
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.长时间不使用对象,导致系统回收掉