浅谈二十三种设计模式之单例模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41751625/article/details/89875409

      单例模式的使用场景是全局只有一个实例存在,这样的场景例如日志类,全局计数器,线程池,连接池等。

      实现单例模式通常有如下五种方法.

      1.懒汉式

public class SingleTon1 {
    private static SingleTon1 instance=new SingleTon1();
    
    private SingleTon1(){}
    
    public static SingleTon1 getInstance(){
        return instance;
    }
}

       

  2.饿汉式(会有线程安全问题)

   

public class SingleTon2 {
    
    private static SingleTon2 instance=null;
    
    private SingleTon2(){}
    
    public static SingleTon2 getInstance(){
        if(instance==null){
            instance=new SingleTon2();
        }
        return instance;
    }
}

 3.DCL(double check lock)双重检查锁

public class SingleTon3 {
    private static volatile SingleTon3 instance=null;
    private SingleTon3(){}
    public static SingleTon3 getInstance(){
        if(instance==null){
            synchronized (SingleTon3.class){
                if(instance==null){
                    instance=new SingleTon3();
                }
            }
        }
        return instance;
    }
}

4.静态内部类的形式 

public class SingleTon {
    private SingleTon(){}

    private static class SingleTonHolder{
        private static SingleTon instance=new SingleTon();
    }
    public static SingleTon getInstance(){
        return SingleTonHolder.instance;
    }
    
}

5.枚举形式

public enum  SingleTon4 {
    INSTANCE;
}

 懒汉式和饿汉式在反射破坏和反序列化时会出问题,推荐使用枚举来创建单例模式,既简单,又很安全

猜你喜欢

转载自blog.csdn.net/weixin_41751625/article/details/89875409
今日推荐