单例模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
1.饿汉单例模式
1.1普通模式
public class Singleton {
private Singleton() {
}
private static Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
}
1.2静态代码块模式
public class Singleton {
private Singleton() {
}
private static Singleton singleton;
static{
singleton = new Singleton();
}
public static Singleton getInstance(){
return singleton;
}
}
2.饱汉单例模式
2.1普通模式(非线程安全)
public class Singleton {
private Singleton() {
}
private static Singleton singleton;
public static Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
2.2 普通模式(线程安全)
public class Singleton {
private Singleton() {
}
private static Singleton singleton;
public static synchronized Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
2.3双重检查锁模式
public class Singleton {
private Singleton() {
}
private static Singleton singleton;
public static Singleton getInstance(){
if(singleton == null){
synchronized (Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
2.4静态内部类方式
public class Singleton {
private Singleton() {
}
private static class SingletonHolder{
private static final Singleton SINGLETON = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.SINGLETON;
}
}
2.5枚举模式
public enum Singleton {
INSTANCE;
}