【单例模式】—— 每天一点小知识

这篇具有很好参考价值的文章主要介绍了【单例模式】—— 每天一点小知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【单例模式】—— 每天一点小知识,每天一点小知识,Java学习笔记,单例模式,设计模式,Java

                                                                              💧 单例模式 \color{#FF1493}{单例模式} 单例模式💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🎐 《Redis》专栏的文章是在学习Redis时,整理的笔记与记录的思考~ 🥏
🥕 《RabbitMQ》专栏的文章是在学习尚硅谷课程时整理的笔记,方便复习巩固~ 🍑
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥



🐳设计模式之单例模式

引言

设计模式是软件开发中重要的概念之一。单例模式是设计模式中的一种,它用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在本文中,我们将深入探讨单例模式的概念和思想,并介绍几种常见的代码实现方式。


单例模式的概念和思想

  💧单例模式是一种创建型设计模式,其主要目的是限制一个类只能有一个实例,并提供一种访问该实例的方式。这对于需要共享资源控制特定资源访问的场景非常有用。

  💧单例模式的核心思想通过封装构造函数,使得该类无法通过常规的方式创建实例。同时,单例模式还提供一个静态方法或者全局变量来获取该类的唯一实例

常见的代码实现方式 ↓

饿汉式

  💧饿汉式是最简单的单例模式实现方式之一。在该实现中,实例在类加载时就被创建,因此称为"饿汉式"。

public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {
        // 私有构造函数
    }

    public static Singleton getInstance() {
        return instance;
    }
}

在上述代码中,我们通过私有的构造函数确保该类无法在外部被实例化。同时,通过静态变量 instance 保存唯一实例,并通过静态方法 getInstance() 返回该实例。

懒汉式

  💧懒汉式是另一种常见的单例模式实现方式。与饿汉式不同,懒汉式在需要时才创建实例。

public class Singleton {
    private static Singleton instance;

    private Singleton() {
        // 私有构造函数
    }

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

在上述代码中,我们将实例的创建延迟到第一次调用 getInstance() 方法时。这种方式在多线程环境下可能会出现问题,因为多个线程可能同时调用 getInstance() 方法,导致创建多个实例。下面我们将介绍一种改进的懒汉式实现方式。

双重检查

  💧双重检查是一种改进的懒汉式实现方式,通过添加同步块来确保只有一个线程能够创建实例。

public class Singleton {
    private static volatile Singleton instance = null;
    ```java
    private Singleton() {
        // 私有构造函数
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

在上述代码中,我们首先检查实例是否已经存在,如果不存在,则进入同步块。在同步块内部,再次检查实例是否为空,如果为空,则创建实例。通过使用 volatile 关键字修饰 instance 变量,确保在多线程环境下对变量的可见性,避免出现创建多个实例的情况。

静态内部类

  💧静态内部类是一种常见的延迟初始化的单例模式实现方式。在该实现中,使用内部类来持有实例,并在需要时进行初始化。

public class Singleton {
    private Singleton() {
        // 私有构造函数
    }

    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

在上述代码中,我们将实例的创建放在了静态内部类 SingletonHolder 中。当调用 getInstance() 方法时,会返回 SingletonHolder 中的实例,从而实现了延迟初始化的效果。这种方式利用了类加载的机制来保证线程安全,同时又避免了同步块带来的性能开销。

枚举

  💧枚举是一种简洁且安全的单例模式实现方式。在枚举中,每个枚举常量都是该枚举类型的一个实例。

public enum Singleton {
    INSTANCE;

    // 添加其他成员和方法
}

在上述代码中,我们使用了一个单独的枚举常量 INSTANCE 来表示该单例的实例。通过直接访问枚举常量 INSTANCE,可以获取到该实例。枚举的特性保证了该实例是全局唯一的,同时也提供了线程安全的保证。

总结

通过使用单例模式,我们可以确保一个类只有一个实例,并提供全局访问点来获取该实例。这在需要共享资源或控制资源访问的场景下非常有用。我们在使用单例模式时也需要注意线程安全和性能等方面的考虑。


【单例模式】—— 每天一点小知识,每天一点小知识,Java学习笔记,单例模式,设计模式,Java


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!文章来源地址https://www.toymoban.com/news/detail-535125.html

到了这里,关于【单例模式】—— 每天一点小知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【GateWay快速入门】 —— 每天一点小知识

                                                                                   💧 G a t e W a y 快速入门 color{#FF1493}{GateWay快速入门} G a t e Wa y 快速入门 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博

    2024年02月09日
    浏览(90)
  • 【JVM内存模型】—— 每天一点小知识

                                                                                   💧 J V M 内存模型 color{#FF1493}{JVM内存模型} J V M 内存模型 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数

    2024年02月08日
    浏览(39)
  • 【Ribbon负载均衡调用】—— 每天一点小知识

                                                                                   💧 R i b b o n 负载均衡调用 color{#FF1493}{Ribbon负载均衡调用} R ibb o n 负载均衡调用 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞

    2024年02月15日
    浏览(34)
  • 【Docker 安装 Zipkin】—— 每天一点小知识

                                                                                   💧 D o c k e r 安装 Z i p k i n color{#FF1493}{Docker 安装 Zipkin} Doc k er 安装 Z i p kin 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云

    2024年02月09日
    浏览(36)
  • 【乐观锁与悲观锁】—— 每天一点小知识

                                                                                   💧 乐观锁与悲观锁 color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐

    2024年02月08日
    浏览(34)
  • 【JUC中的 “8锁现象” 】 —— 每天一点小知识

                                                                                   💧 J U C 中的“ 8 锁现象” color{#FF1493}{JUC中的 “8锁现象” } J U C 中的 “8 锁现象 ” 💧           🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微

    2024年02月08日
    浏览(31)
  • 【SpringCloud config分布式配置中心】—— 每天一点小知识

    ·                                                                         💧 S p r i n g C l o u d c o n f i g 分布式配置中心 color{#FF1493}{SpringCloud config分布式配置中心} Sp r in g Cl o u d co n f i g 分布式配置中心 💧           🌷 仰望天空,妳

    2024年02月11日
    浏览(37)
  • 【深入了解Nacos集群和持久化配置】 ——每天一点小知识

                                                                                   💧 深入了解 N a c o s 集群和持久化配置 color{#FF1493}{深入了解Nacos集群和持久化配置} 深入了解 N a cos 集群和持久化配置 💧           🌷 仰望天空,妳

    2024年02月11日
    浏览(44)
  • 【Spring Cloud Gateway 新一代网关】—— 每天一点小知识

                                                                            💧 S p r i n g C l o u d G a t e w a y 新一代网关 color{#FF1493}{Spring Cloud Gateway 新一代网关} Sp r in g Cl o u d G a t e w a y 新一代网关 💧           🌷 仰望天空,妳我亦是行

    2024年02月16日
    浏览(36)
  • 【使用Spring Cloud Gateway构建微服务网关】—— 每天一点小知识

    ·                                                                         💧 使用 S p r i n g C l o u d G a t e w a y 构建微服务网关 color{#FF1493}{使用Spring Cloud Gateway构建微服务网关} 使用 Sp r in g Cl o u d G a t e w a y 构建微服务网关 💧        

    2024年02月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包