单例模式的不同实现方式

1.静态变量式(较推荐)

/**
    单例模式-静态变量
 */
public class Sington1 {
    private Sington1()
    { }
    public  static  Sington1 sington1=new Sington1();

    public static  Sington1 getInstance()
    {
        return sington1;
    }
}

2.线程不安全式

当同时有两个场景需要单例对象时,会同时进入getInstance()方法中,线程不安全

public class Sington2 {
    private Sington2()
    {}
    public  static  Sington2 sington2;

    public static  Sington2 getInstance()
    {
        if(sington2==null)
        {
            sington2=new Sington2();
        }
        return sington2;
    }


}

3.线程安全式,但是效率不高

public class Sington3 {
    private Sington3()
    {
    }
    public  static  Sington3 sington3;

    public static synchronized   Sington3 getInstance()
    {
        if(sington3==null)
        {
            sington3=new Sington3();
        }
        return sington3;
    }

}

4.线程安全式,效率也不错(较推荐)

双加锁

public class Sington4 {
    private Sington4()
    {

    }
    public  static  Sington4 sington4;

    public static  Sington4 getInstance()
    {
        if(sington4==null)
        {
            synchronized(Sington4.class)
            {
                sington4=new Sington4();
            }

        }
        return sington4;
    }

}

5.静态内部类式

public class Sington5 {
    private static class SingletonHolder {
        private static final Sington5 INSTANCE = new Sington5();
    }

    private Sington5() {
    }

    public static final Sington5 getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

6.枚举式(较推荐)

public enum Sington6 {
    INSTANCE;
    private Dog instance;

    Sington6() {
        instance = new Dog();
    }
    public Dog getInstance() {
        return instance;
    }

    public static void main(String[] args) {
        System.out.println(Sington6.INSTANCE.getInstance());
    }
}
发布了211 篇原创文章 · 获赞 101 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_43889841/article/details/104101577