定义:该类的对象在某一系统中只能唯一存在
应用:
- 只能存在一个正在打印的任务
- 一个系统只能存在一个计时工具
- 只能存在一个资源管理器
要点:
- 某个类只能有一个实例
- 必须自行创建该实例
- 必须自行向整个系统提供该实例
实现:
- 单例模式只提供私有的构造
- 含有一个静态的私有变量
- 提供一个静态的创建实例的方法
形式:
1 一般形式:
public class Singleton {
private static Singleton instance = null;
/**
* 构造私有就不会被外部实例化使用
*/
private Singleton() {
}
/**
* 静态方法产生类的实例
*/
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2 简单模式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
// 这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
3 双重锁模式
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (null == instance) {
instance = new Singleton();
}
}
}
return instance;
}
}