其他分享
首页 > 其他分享> > 设计模式学习——单例模式

设计模式学习——单例模式

作者:互联网

「保证类只有一个实例」的设计模式就是单例模式。

1.饿汉式

在类加载时创建,方法的返回创建好的实例,,无法懒加载。

public class HungryMan {
    private static HungryMan hungryMan = new HungryMan();
      private HungryMan() {
    }
    public static HungryMan getInstance() {
        return hungryMan;
    }
}

2.懒汉式

按需加载,且加载一次

2.1非线程安全版

public class LazyMan {
    private static LazyMan lazyMan;
    private LazyMan(){}
    public static LazyMan getInstance(){
        if (lazyMan == null){
            lazyMan = new LazyMan();
        }
        return lazyMan;
    }
}

2.2DoubleCheckedLocking

public class LazyMan {
    private volatile static LazyMan lazyMan;//volatile保证线程可见性和禁止指令重排序
    private LazyMan(){}
    public static LazyMan getInstance(){
        if (lazyMan == null){
            synchronized (LazyMan.class){
                if (lazyMan == null){//引用放在线程对应虚拟机栈,非线程共享,需volatile修饰
                    lazyMan = new LazyMan();
                }
            }
        }
        return lazyMan;
    }
}

2.3静态内部类

public class LazyMan {
    private static class LazyManHolder{
        private static LazyMan lazyMan = new LazyMan();
    }
    private LazyMan(){}
    public static LazyMan getInstance(){
        return LazyManHolder.lazyMan;
    }
}

2.4Enum

不仅可以解决线程同步,还可以防止反序列化

public enum  LazyMan {
    INSTANCE;
}

标签:class,private,LazyMan,public,static,模式,单例,设计模式,lazyMan
来源: https://www.cnblogs.com/heyufeng0313/p/14748951.html