单例模式

单例模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

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;
}

你可能感兴趣的:(单例模式)