单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,并且单例有几种模式,适合不同的场景:
- 懒汉式:
public class Singleton {
private static Singleton uniqueInstance;//把实例设为私有
private Singleton() { //构造方法设为私有
super();
}
//加上synchronized,防止多线程创建多个实例,但是性能会降低
public static synchronized Singleton getInstance(){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
- 饿汉式
//初始化直接创建,但是此时并不一定需要,可能造成资源浪费
private static Singleton uniqueInstance = new Singleton();
private Singleton() {
super();
}
public static Singleton getInstance(){
return uniqueInstance;
}
- 双重锁懒汉式
//加volatile保证 if判断实例为null是一定正确的
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
super();
}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}