【设计模式】——单例模式(其他类型)

2020-06-15  本文已影响0人  从不打小怪兽

双重检测锁式

/**
 * 双重检查锁
 * @author admin
 *
 */
public class SingletonPattern03 {
    
    private static SingletonPattern03 st3=null;
    
    private SingletonPattern03() {
    }
    
    public static SingletonPattern03 getInstance() {
        
        if(st3==null) {
            SingletonPattern03 sp;
            
            synchronized (SingletonPattern03.class) {
                
                sp=st3;
                
                if(sp==null) {
                    synchronized (SingletonPattern03.class){
                        if(sp==null) {
                            sp=new SingletonPattern03();
                        }
                    }
                    st3=sp;
                }
                
            }
        }
        return st3;
    }
    
    
}

问题:由于编译器优化原因和JVM底层内部模型原因,偶尔会出问题,不建议使用--->看这个其他类的说明

静态内部类(也是一种懒加载的方式)

/**
 * 静态内部内
 * @author admin
 *
 */
public class SingletonPattern04 {
    
    //加载类时不会加载,真正调用的时候再加载。
    private static class SingletonInstacne{
        private static final SingletonPattern04 st4=new SingletonPattern04();
    }
    
    private SingletonPattern04(){
    }
    
    public static SingletonPattern04 getInstance(){
        return SingletonInstacne.st4;
    }
    
}

此时我没有啥想说的

枚举实现单例模式

/**
 * 枚举式(没有延时加载)
 * @author admin
 *
 */
public enum SingletonPattern05 {
    INSTANCE;
    
    //可以添加需要的操作
    public void singletonOperation(){
    }
    
}

缺点:无延时加载

上一篇下一篇

猜你喜欢

热点阅读