什么是单例模式
首先我们需要知道什么是设计模式,设计模式是软件开发人员在长期的软件开发过程中总结出来的在面临一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。这就有点类似于我们古代的《孙子兵法》一样,都是通过长期的经验总结出来的。那么使用设计模式的目的是什么呢?
使用设计模式的目的:
1.为了提高代码的可重用性
2.让代码更容易被他人理解
3.保证代码可靠性
4. 设计模式使代码编写真正工程化
5.设计模式是软件工程的基石脉络,如同大厦的结构一样
单例模式
单例模式的意思就是一个类只能创建一个对象,这种模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。就比如说在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取配,然后服务进程中的其它对象在通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。
知道了单例模式的定义之后,我们接下来就应该考虑一下该怎么去实现单例模式了。单例模式的实现有两种方式,一种是饿汉模式,一种是懒汉模式,那么这两种方式有什么区别呢,接下来就为大家详细介绍。
饿汉模式
想象一下,当一个人非常饿的时候,第一件事肯定就是先吃饭,饿汉模式就是说不管将来用不用,在程序启动的时候就创建一个唯一的实例对象。了解了了什么是饿汉模式后我们就可以开始写代码了,写代码的时候我们要牢牢的抓住两个点吗,一个是这个类只能创建一个对象,另一个就是在程序启动的时候就创建了一个唯一的对象。为了保证一个类仅能创建一个实例,我们需要将构造函数的访问权限设置成私有的,而想要在启动的时候就创建我们就想到了static这个关键字,于是我们就写出了如下代码:
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton* GetInstence()
{
return &m_instence;
}
private:
Singleton()
{
}
//c++98防拷贝
Singleton(Singleton const&);
Singleton& operator = (Singleton const&);
//c++11防止拷贝
/*
Singleton(Singleton const&) = delete;
Singleton& operator = (Singleton const&) = delete;
*/
static Singleton m_instence;
};
Singleton Singleton::m_instence;
int main()
{
Singleton :: GetInstence();
return 0;
}
饿汉模式的优缺点
优点:饿汉模式的优点显然我们从代码上就看出来了,那就是实现非常简单,而且是线程安全的
缺点:但是缺点也是非常明显的,它可能会导致进程启动慢,而且如果有多个单例对象实例启动顺序不确定
懒汉模式
懒汉模式顾名思义就是有的事情懒得去做,对比饿汉模式来说,“饿汉”每次使用实例对象时都需要创建对,但是对于“懒汉”来说,它只是在第一次使用实例对象的时候创建对象,后面再次使用时如果之前已经创建了,就不用再次创建了,“懒”了很多。考虑到线程安全等问题,我们写出如下代码
#