当前位置: 首页 > article >正文

单例模式的两种方法:饥汉模式和懒汉模式

签名:但行好事,莫问前程。

文章目录

  • 前言
  • 一、单例模式
  • 二、饥汉模式实现单例
  • 三、懒汉模式实现单例
  • 总结


前言

记录一下单例模式的两种方法:饥汉模式和懒汉模式。


一、单例模式

单例模式:单例模式是一种常用的软件设计模式,其主要目的是确保一个类在整个系统中只有一个实例。

单例模式通过限制类的实例化来满足这一目的,并提供一个全局访问点来访问这个唯一的实例。这种模式在需要维护全局状态的系统或应用程序中非常有用,例如,在配置管理或数据访问中,单例模式可以确保只有一个对象负责访问和存储关键资源。

单例模式通常通过将构造函数设置为私有的,并提供一个静态方法来返回这个唯一的实例来实现。这可以防止其他代码实例化该类的多个对象,并提供一种统一的方式来访问这个实例。单例模式有两种常见的实现方式,分别是饿汉式和懒汉式。

二、饥汉模式实现单例

饿汉式单例:在类加载时立即创建实例

public class HungrySingleton {
    // 类的构造器私有化
    private HungrySingleton(){}

    // 在内部类里面创建当前实例
    private static HungrySingleton instance = new HungrySingleton();

    // get方法来获取当前类的实例,必须是静态的
    public static HungrySingleton getInstance() {
        return instance;
    }
}

优点:在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全。
缺点:类加载时就初始化,浪费内存。

三、懒汉模式实现单例

而懒汉式:在需要时才创建实例

public class LazySingleton {
    // 构造方法私有化
    private LazySingleton(){}

    // 先不实例化对象
    private static LazySingleton instance = null;

    // get获取当前实例,必须是静态的,需要加锁保证线程安全
    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            // 只在第一次调用的时候执行
            instance = new LazySingleton();
        }
        return instance;
    }
}

优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。


总结

博客主要记录了单例模式的两种方法:饥汉模式和懒汉模式,有啥错误或不足地方请指正,如果对你有所帮助,请一键三连。


http://www.kler.cn/a/273917.html

相关文章:

  • Windows11环境下设置MySQL8字符集utf8mb4_unicode_ci
  • Android 来电白名单 只允许联系人呼入电话
  • vulnhub靶场【DC系列】之7
  • Jenkins内修改allure报告名称
  • reducer同步,dispatch异步
  • 微服务组件——利用SpringCloudGateway网关实现统一拦截服务请求,避免绕过网关请求服务
  • Typecho博客网站底部添加网站已运行时间教程
  • 使用 @JsonIgnore注解后 获取不到参数值问题
  • torchvision pytorch预训练模型目标检测使用
  • 实体门店运营管理与技巧:轻松应对行业痛点
  • CVE-2024-24112 XMall后台管理系统 SQL 注入漏洞分析
  • 用 二层口 实现三层口 IP 通信的一个实现方法
  • MD5算法:密码学中的传奇
  • 【异常处理】SpringMVC无法跳转视图问题
  • 机器人在果园内行巡检仿真
  • SpringBoot应用关闭时发什么了啥?SpringApplicationShutdownHook是什么?
  • 蓝桥杯-24点-搜索
  • 前端模块化开发
  • QT6实现创建与操作sqlite数据库(一)
  • 【ZooKeeper】1、基本介绍
  • 计算机网络的组成
  • Linux下安装多个nodejs并映射Jenkins
  • 【HTTP】面试题整理
  • 5.1.7.1、【AI技术新纪元:Spring AI解码】Mistral AI函数调用
  • PHP反序列化--_wakeup()绕过
  • 蓝桥杯刷题(十一)