单例(singleton)模式

1.意图

确保一个类只有一个实例,并提供一个全局访问点。

2.解释
  • 确保只创建一个特定类的一个对象。
  • 在软件工程中,单例模式是将类的实例化限制为一个对象的软件设计模式。当需要一个对象来协调整个系统的动作时,这是非常有用的。
3.使用场景
  • 必须只有一个类的一个实例,并且必须可以从一个众所周知的接入点访问客户端。
  • 当唯一的实例应该通过子类化可扩展,并且客户端应该能够使用扩展实例而不修改它们的代码。
4.单例的几种形式
1.饿汉模式
public class IvoryTower {

    private IvoryTower() {
    }

    private static final IvoryTower INSTANCE = new IvoryTower();

    public static IvoryTower getInstance() {
        return INSTANCE;
    }

}
2.懒汉模式
public class InitializingOnDemandHolderIdiom {

    private InitializingOnDemandHolderIdiom() {

    }

    public static InitializingOnDemandHolderIdiom getInstance() {
        return HelperHolder.INSTANCE;
    }

    private static class HelperHolder {
        private static final InitializingOnDemandHolderIdiom INSTANCE = new InitializingOnDemandHolderIdiom();
    }

}

3.懒汉模式(线程安全)

public class ThreadSafeLazyLoadedIvoryTower {

    private static ThreadSafeLazyLoadedIvoryTower instance;

    private ThreadSafeLazyLoadedIvoryTower() {
        if (instance != null) {
            throw new IllegalStateException("Already initialized.");
        }
    }

    public static ThreadSafeLazyLoadedIvoryTower getInstance() {
        if (instance == null) {
            instance = new ThreadSafeLazyLoadedIvoryTower();
        }
        return instance;
    }


}

4.懒汉模式(线程安全双检测)

public class ThreadSafeDoubleCheckLocking {


    private static volatile ThreadSafeDoubleCheckLocking instance;

    private ThreadSafeDoubleCheckLocking() {
        if (instance != null) {
            throw new IllegalStateException("Already initialized.");
        }
    }

    public static ThreadSafeDoubleCheckLocking getInstance() {

        ThreadSafeDoubleCheckLocking result = instance;

        if (result == null) {
            synchronized (ThreadSafeDoubleCheckLocking.class) {
                result = instance;
                if (result == null) {
                    instance = result = new ThreadSafeDoubleCheckLocking();
                }
            }
        }

        return result;
    }

}
参考教程:https://github.com/iluwatar/java-design-patterns/tree/master/singleton
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值