1. 为什么需要单例模式
1.有一些对象其实我们只需要一个,比方说:线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象,充当打印机、显卡等设备的驱动程序的对象。事实上,这类对象只能有一个实例,如果制造出多个实例,就会导致许多问题产生,例如:程序的行为异常,资源使用过量,或者是不一致的结果。
2.如果将对象赋值给一个全局变量,那么你必须在程序一开始就创建好对象,对吧?万一这个对象非常耗费资源,而程序在这次执行过程中又一直没有使用到它,不就形成浪费了吗?稍后你会看到,利用单件模式,我们可以在需要时创建对象。
2. 介绍单例模式
单例模式其实就是将构造器设置为私有,设置静态方法调用构造函数初始化(在里面进行唯一的判定)
3. 源码
3.1 java
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// other useful methods here
public String getDescription() {
return "I'm a classic Singleton!";
}
}
3.2 C++
3.2.1 Singleton.h
#include <string>
using std::string;
class Singleton{
public:
static Singleton *getInstance();
string getDescription();
private:
Singleton();
static Singleton *uniqueInstance;
};
3.2.2 Singleton.cpp
#include "Singleton.h"
//Singleton *Singleton::uniqueInstance=nullptr;
Singleton *Singleton::getInstance()
{
//懒汉法(在类外声明uniqueInstance)
// if(uniqueInstance==nullptr){
// uniqueInstance=new Singleton();
// }
// return uniqueInstance;
//局部静态变量方法(跟全局变量没区别)
static Singleton uniqueInstance;
return &uniqueInstance;
}
string Singleton::getDescription()
{
return "I'm a classic Singleton!";
}
Singleton::Singleton()
{
}
4.处理多线程