singleton pattern单例模式:
确保某一个类在程序运行中只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)
该实例被所有程序模块共享。这个类称为单例类。
单例模式的要点:
1. 单例类只能有一个实例
2. 它必须自行创建这个实例
3. 它必须自行向整个系统提供提供这个实例
实现方法:
- 1. 单例模式的类只提供私有的构造函数
- 2. 类定义中含有一个该类的静态私有对象
- 3. 该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象
两种实现方式:
//****************懒汉式****************
class Singleton
{
private:
Singleton_Lazy();
static Singleton* pSingleton;
public:
static Singleton* getInstance()
{
if (pSingleton == NULL)
{
pSingleton = new Singleton;
}
return pSingleton;
}
};
//类外初始化
Singleton* Singleton::pSingleton = NULL;
//****************饿汉式****************
class Singleton
{
private:
Singleton_Hungry();
static Singleton* pSingleton;
public:
static Singleton* getInstance()
{
return pSingleton;
}
};
Singleton_Hungry* Singleton::pSingleton = new Singleton;
懒汉式与饿汉式的区别:
懒汉式:在第一次用到类实例的时候才会去实例化;
饿汉式:在单例类定义的时候就进行实例化。
特点与选择:
- 在要进行线程同步,访问量比较大,或者可能访问的线程比较多时,采用饿汉实现,可以实现更好的性能。这是以空间换时间。
- 在访问量较小时,采用懒汉实现。这是以时间换空间。
单例模式与多线程
- 懒汉模式遇到多线程,是线程不安全的,通过锁来解决线程不安全的问题;
- 饿汉模式进入main函数之前就由单线程方式实例化,是线程安全的;
~~饿汉式(静态常量)
饿汉式(静态代码块)
懒汉式(线程不安全)
懒汉式(线程安全,同步方法)
懒汉式(线程安全,同步代码块)
双重检查
静态内部类
枚举~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。