设计模式 - Java中单例模式的6种写法及优缺点对比

目录
  • 1 为什么要用单例模式

    • 1.1 什么是单例模式

    • 1.2 单例模式的思路和优势

  • 2 写法① - 饥饿模式

    • 2.1 代码示例

    • 2.2 优缺点比较

  • 3 写法② - 懒惰模式

    • 3.1 代码示例

    • 3.2 优缺点比较

    • 3.3 线程是否安全的测试

    • 3.4 线程安全的懒惰模式

  • 4 写法③ - 双重检查锁模式

    • 4.1 代码示例

    • 4.2 DCL存在的问题

    • 4.3 解决方法

  • 5 写法④ - 静态内部类实现单例

    • 5.1 代码示例

    • 5.2 静态内部类的优势

  • 6 写法⑤ - 枚举类实现单例

    • 6.1 代码示例

    • 6.2 优缺点比较

  • 7 写法⑥ - 通过ThreadLocal实现单例

  • 8 扩展: JDK中的单例 以及 如何破坏单例模式

    • 8.1 JDK中常见的单例模式

    • 8.2 破坏单例模式的方法

  • 9 扩展 - 性能对比

  • 参考资料

  • 版权声明

1 为什么要用单例模式

1.1 什么是单例模式

单例模式就是: 在程序运行期间, 某些类有且最多只有一个实例对象.

我们的应用中可能存在这样的需求: 某些类没有自己的状态, 在程序运行期间它们只需要有一个实例, 换句话说, 无论为这些类创建多少个实例, 对程序的运行状态、运行结果都不会产生影响.

更重要的一点是: 有些类如果存在两个或者两个以上的实例, 应用程序就会发生某些匪夷所思的错误, 不同于空指针、数组越界、非法参数等错误, 这样的问题一般都很难提前发觉和定位.

这个时候, 我们就应该把这样的类控制为单例结构 —— 确保程序运行期间最多只有一个相对应的实例对象.

关于类的状态的理解:
① 比如有一个 Person 类, 它有成员变量name、age等等, 不同的姓名和年龄就是不同的人, 也就是说这些变量都是不确定的, 这样的类就是有状态的类.
② 而像一些配置类, 比如 RedisProps (Redis的配置信息)类, 它的所有属性和方法都是static的, 没有不确定的属性, 这样的类就可以认为是没有状态的类.
—— 纯属个人看法, 若理解有误, 还请读者朋友们提出, 欢迎批评和交流

(0)

相关推荐

  • 【重温设计模式】之005单例模式

    [重温设计模式系列源码] 单例模式 基本原理 含义 一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建. 这个类提供了一种访问其唯一的对象的方式, 访问者可以直接访问,不需要实例化该类的 ...

  • 单例模式的八种写法

    单例模式作为日常开发中最常用的设计模式之一,是最基础的设计模式,也是最需要熟练掌握的设计模式.单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点.那么你知道单例模式有多少种实现方式 ...

  • 定制衣柜用什么板材好?5种常见板材优缺点对比!

    衣柜是卧室里的重要家具,装修时大多数家庭会选择定制衣柜,定制衣柜需要用到板材,常见的衣柜板材主要有颗粒板.多层实木板.大芯板.生态板.指接板等,那么哪种板材更好呢?下面就和"未来家装网&qu ...

  • 行书中撇捺组合有哪七种写法?每种组合不同写法自然不同!

    行书中撇捺组合有哪七种写法?每种组合不同写法自然不同!

  • 微进程:微服务中后台作业的一种新架构设计模式

    实现微服务时,后台进程是最容易被忽略的元素,而绝大多数应用程序都需要后台进程. 微服务领域的大多数参考书目都着重于如何拆分单体.领域驱动设计.编排与同步.如何拆分数据库等.但人们往往不会提到后台进程, ...

  • Java中验证编码格式的一种方法

    Java中验证编码格式的一种方法

  • UC头条:行书《兰亭序》中, 横画的12种写法变化, 学习了

    点击加载图片 冯承素<兰亭序>片段行书的笔画和楷书不同.楷书的书写虽然也讲究连贯流畅,但笔画还是比较安静的,追求的是笔画的精美和法度的森严.而行书则不同,笔画间的游丝引带更明显,姿态的变化 ...

  • 书法中的折笔,不分书体,一共九种写法!

    转折概述 书法中的转折处,写法比较复杂,因为它们形态多样,变化丰富,但是综合起来不外乎这么几种写法,如果还有别的,应该是形态小异,原理相同. 我先说一下他们的名称,书法中的转折有圆转,有绞转,有搭折, ...

  • Java中的设计模式(一):观察者模式

    工具与资源中心 帮助开发者更加高效的工作,提供围绕开发者全生命周期的工具与资源https://developer.aliyun.com/tool?spm=a1z389.11499242.0.0.654 ...

  • java中的单例模式

    单例模式是一种设计模式,这一种设计模式的目的是使得该类在整个JVM系统中只有唯一的一个实例对象,在就java开发过程中,很多场景下会碰到这种需求,所以单例模式也是最常用的设计模式之一,下面从以下几个方 ...