设计模式-单例模式(java)

一、双重检查(推荐)

/**
 * 右手类,正常来说你的右手只有一个吧,不可能有多个右手。
 * 所以,右手类必须定义为单例模式
 * 单例模式:双重检查(推荐),在懒汉式的基础上增加了延迟初始化和线程安全的判断,降低了同步的开销。
 */
public class RightHand {

    // 使用volatile关键字保证多线程环境下的可见性
    private static volatile RightHand instance;

    //将构造方法设为私有,防止外部创建实例
    private RightHand() {}

    //提供一个全局访问点
    public static  RightHand getInstance() {
        //第一次检查实例是否已经创建
        if(instance == null){
            //线程安全的创建实例
            synchronized (RightHand.class){
                // 第二次检查实例是否已经创建
                if(instance == null){
                    instance = new RightHand();
                }
            }
        }


        return instance;
    }


}

二、静态内部类(推荐)

/**
 * 左手类,正常来说你的左手只有一个吧,不可能有多个左手。
 * 所以,左手类必须定义为单例模式
 * 单例模式:静态内部类(推荐),利用了Java的内部类特性,实现了懒加载,同时保证了线程安全。
 */
public class LeftHand {

    //将构造方法设为私有,防止外部创建实例
    private LeftHand(){}

    //提供一个全局访问点
    public static LeftHand getInstance(){
        // 使用同步代码块保证线程安全
        synchronized (LeftHand.class){
            // 判断实例是否已经创建,如果已经创建则直接返回
            if(LeftHandHolder.INSTANCE!=null){
                return LeftHandHolder.INSTANCE;
            }else{
                // 如果实例未创建,则创建一个新的实例并返回
                LeftHand newInstance = new LeftHand();
                // 将新创建的实例赋值给静态内部类的引用
                LeftHandHolder.INSTANCE = newInstance;
                return newInstance;
            }
        }
    }

    // 创建一个静态内部类,用于持有外部类的实例
    private static class LeftHandHolder{

        private static LeftHand INSTANCE = new LeftHand();

    }

}

三、使用场景

单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。以下是一些常见的使用场景:

  1. 配置管理:在应用程序中需要对一些配置项进行统一管理和修改时,可以使用单例模式来保证只有一个配置管理器实例。

  2. 日志管理:在应用程序中需要记录日志时,可以使用单例模式来保证只有一个日志管理器实例,从而方便地集中管理和输出日志。

  3. 数据库连接池:在应用程序中需要频繁地创建和销毁数据库连接时,可以使用单例模式来保证只有一个数据库连接池实例,从而提高性能和资源利用率。

  4. 缓存管理:在应用程序中需要对一些数据进行缓存时,可以使用单例模式来保证只有一个缓存管理器实例,从而提高缓存的读写效率。

  5. 线程池管理:在应用程序中需要对线程进行统一管理和调度时,可以使用单例模式来保证只有一个线程池实例,从而方便地管理和控制线程的执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值