单例模式(Singleton)

Singleton(单例):

        包含一个自己的类实例的属性,并把构造方法用private关键字隐藏起来,对外只提供getInstance()方法以获得这个单例对象

        除了“饿汉”与“懒汉”这2种单例模式,其实还有其他的实现方式。但万变不离其宗,它们统统都是由这2种模式发展、衍生而来的

饿汉示例代码:

/**
 * 饿汉模式
 */
public class HungerSingleton {

    private static final HungerSingleton instance = new HungerSingleton();

    // 构造方法私有,不允许外部实例化对象
    private HungerSingleton() {
    }

    // 对外暴露获取实例的方法
    public static HungerSingleton getInstance() {
        return instance;
    }
}

懒汉单例示例代码

package com.azure.design.singleton;

/**
 * 懒汉模式
 */
public class LazySingleton {

    /**
     * 变量的定义不再使用find关键字,这意味着它不再是常量,而是需要后续赋值的变量;
     * 而关键字volatile对静态变量的修饰则能保证变量值在各线程访问时的同步性、唯一性
     */
    private volatile static LazySingleton lazySingleton;

    // 构造方法私有化,防止外部创建对象
    private LazySingleton() {
    }

    /**
     *  用了2个嵌套的判空逻辑,这就是懒加载模式的“双检锁”:
     *  外层放宽入口,保证线程并发的高效性;
     *  内层加锁同步,保证实例化的单次运行。
     *  如此里应外合,不仅达到了单例模式的效果,还完美地保证了构建过程的运行效率,一举两得
     * @return
     */
    public static LazySingleton getLazySingleton() {

        // 判断对象是否为空
        if(lazySingleton == null) {
            // 防止多线程进入
            synchronized (LazySingleton.class) {
                // 只有进入的第一个线程才可以创建对象
                if (lazySingleton == null) {
                    lazySingleton = new LazySingleton();
                }
            }
        }

        return lazySingleton;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值