单例模式(6种单例实现方式)

1.饿汉

/**
 * 饿汉
 * 简单常用的单例模式
 * 优点:线程安全,容易编写
 * 缺点:随着类的加载就会初始化这个单例。
 * @author WangJunren
 * @since 2021/2/22 07:56
 */
public class Single_001 {
    private static final Single_001 single_001 = new Single_001();
    private Single_001(){}
    public Single_001 getInstance(){
        return single_001;
    }
}

2.饿汉2

/**
 * 跟001 一个意思
 * @author WangJunren
 * @since 2021/2/22 08:02
 */
public class Single_002 {
    private final static Single_002 single_002;
    static{
        single_002 = new Single_002();
    }
    private Single_002(){}
    public Single_002 getInstance(){
        return single_002;
    }
}

3.懒汉

/**
 * 懒汉
 * 很明显的线程不安全的问题
 * @author WangJunren
 * @since 2021/2/22 08:04
 */
public class Single_003 {
    private static Single_003 single_003;
    private Single_003(){}
    public Single_003 getInstance(){
        if (single_003 == null) {
            single_003 = new Single_003();
        }
        return single_003;
    }
}

4.双重检查

/**
 * 双重检查
 * @author WangJunren
 * @since 2021/2/22 08:07
 */
public class Single_004 {
    private static Single_004 single_004;
    private Single_004(){}
    public Single_004 getInstance(){
        if (single_004 == null) {
            synchronized (this){
                if (single_004 == null) {
                    single_004 = new Single_004();
                }
            }
        }
        return single_004;
    }
}

5.内部类方式

/**
 * 内部类方式
 *
 * @author WangJunren
 * @since 2021/2/22 09:09
 */
public class Single_005 {
    private  Single_005(){}
    public Single_005 getInstance(){
        return Single_005Handle.single_005;
    }
    private static class Single_005Handle{
        private static final Single_005 single_005 = new Single_005();
        private Single_005Handle(){}
    }
}

6.枚举方式

/**
 * 枚举方式的单例
 *
 * @author WangJunren
 * @since 2021/2/22 09:16
 */
public enum Single_006 {
    INSTANCE;
}
posted @ 2021-02-25 19:14  JunSir-WJR  阅读(112)  评论(0)    收藏  举报