一、单例模式定义:
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。比如说:现在就一台打印机,好多人共用,以避免一个打印状态同时被两个请求同时调用,就需要单例思想去设计。
二、单例模式特点:
- 单例类只能有一个实例
- 单例类必须自己创建自己的唯一实例
- 单例类必须给所有其他对象提供这一实例
三, 实例(列举三种)
1.懒汉模式
懒汉模式,如果很少用这个资源static Singleton加载的实例也是浪费资源
public class Singleton {
//私有构造
private Singleton() {}
private static Singleton single = new Singleton();
// 1.懒汉模式,如果很少用这个资源static Singleton加载也是浪费资源
// 静态方法
public static Singleton getInstance() {
return single;
}
}
2.饿汉模式(线程同步)
饿汉模式(线程同步),如果资源访问量比较大,线程同步消耗资源也比较大
private Singleton() {}
//1.饿汉模式(线程同步),如果资源访问量比较大,线程同步消耗资源比较大
private static Singleton single = null;
// 静态方法
public static synchronized Singleton getInstance() {
if(single == null) {
single = new Singleton();
}
return single;
}
3.饿汉模式(双重检查)
双重检查,避免了每次获取实例的同步加锁浪费资源的问题
private Singleton() {}
private static Singleton single = null;
// 双重检查,避免了每次获取实例的同步加锁浪费资源的问题
public static Singleton getInstance() {
if (single == null) {
synchronized (Singleton.class) {
if (single == null) {
single = new Singleton();
}
}
}
return single;
}