单例设计模式

单例设计模式

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

什么是设计 模式

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

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

单例设计模式

什么是单例设计模式

保证整个类的使用只有一个对象
例如:
1.多线程网络资源初始化
2.回收站机制
3.任务管理器
4.日志管理

如何实现单例设计模式

1.构造函数私有化
2.提供一个全局的静态方法,访问唯一对象
3.类中定义一个静态指针,指向唯一对象

单例设计模式的实现

有2种方式
1.懒汉式
2.饿汉式

懒汉式

在类中创建一个对象

//单例设计模式
#include
#include

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;
}

单例设计模式_第1张图片

如果所示,p2与p3的地址是一样的,单例设计模式只有唯一的一个对象

但其实按理说我觉得3个的地址都应该一样
可能是我写错了,或者说对这单例设计模式还有不知道的细节,先暂时就这样

单例设计模式_第2张图片

饿汉式

饥不择食,不管用不用,在全局中创建一个对象
饿汉式跟懒汉式的代码区别不大

#include
#include

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;
}

单例设计模式_第3张图片

当然这里饿汉式就正常了,三个地址一样,说明单例设计模式,只能有一个唯一对象

单例设计模式的优缺点

优点:
1.内存只有一个对象,节省内存空间
2.避免频繁创建和销毁对象,提高性能
3.避免对共享的资源多重占用,简化访问

缺点:
1.不适合变化频繁的对象
2.长时间不使用对象,导致系统回收掉

你可能感兴趣的:(C++(从0基础到入门),设计模式,c++,单例模式)