五种单例模式

1、饿汉式

public class SingletonHungry {
    private SingletonHungry () {
    }
    private static SingletonHungry singletonHungry = new SingletonHungry();
    public static SingletonHungry getInstance(){
        return singletonHungry;
    }
}

2、懒汉式

public class SingletonLazy {
    private static SingletonLazy singletonLazy;
    private SingletonLazy () {
        /**
         * 防止被反射强行创建实例
         */
        if(singletonLazy != null) {
            throw new UnsupportedOperationException("SingletonLazy was created!");
        }
    }
    public static SingletonLazy getInstance() {
        if(singletonLazy == null) {
            try {
                singletonLazy = new SingletonLazy();
                return singletonLazy;
            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        return singletonLazy;
    }
}

3、双锁

public class SingletonLock {
    private static SingletonLock singletonLock;
    private SingletonLock() {
    }
    public static SingletonLock getInstance() {
        if(singletonLock == null) {
            synchronized (SingletonLock.class) {
                if(singletonLock == null) {
                    singletonLock = new SingletonLock();
                    return singletonLock;
                }
            }
        }
        return singletonLock;
    }
}

4、内部类

public class SingletonInner {
    private SingletonInner() {
        if (Holder.INSTANCE != null) {
            throw new UnsupportedOperationException("INSTANCE was created!");
        }
    }
    static class Holder {
        private static SingletonInner INSTANCE = new SingletonInner();
    }
    public static SingletonInner getInstance() {
        return Holder.INSTANCE;
    }
}

5、枚举

public enum SingletonEnum{
    INSTANCE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值