欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-14 18:25:39
本篇通过代码讲解6种不同的单例模式的实现方式, 分别是: 饥饿模式、懒惰模式、双重检查锁模式、静态内部类模式、枚举类模式和ThreadLocal模式, 并分析了它们之间的优缺点, 最后还介绍了JDK中常见的单例模式的应用, 以及破坏单例模式的多种方法. ......

1 为什么要用单例模式

1.1 什么是单例模式

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

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

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

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

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