设计模式:单例模式

文章目录

1、概念

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

关键代码:构造函数是私有的。

2、实现方式

1、懒汉式

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:易

描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。

优点:第一次调用才初始化,避免内存浪费。

缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。

2、饿汉式

是否 Lazy 初始化:否

是否多线程安全:是

实现难度:易

描述:这种方式比较常用,但容易产生垃圾对象。

优点:没有加锁,执行效率会提高。

缺点:类加载时就初始化,浪费内存。

3、双检锁/双重校验锁

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:较复杂

描述:这种方式采用双锁机制,安全且在多线程情况下能保持高性能。

4、登记式/静态内部类

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:一般

5、枚举

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:易

描述:这种实现方式还没有被广泛采用,但这是实现单例模式的最佳方法。它更简洁,自动支持序列化机制,绝对防止多次实例化。

6、容器实现单例

是否 Lazy 初始化:否

是否多线程安全:是

实现难度:一般

相关推荐
new_daimond5 小时前
设计模式-访问者模式详解
设计模式·访问者模式
大飞pkz5 小时前
【设计模式】组合模式
开发语言·设计模式·c#·组合模式
不搞学术柒柒5 小时前
设计模式-结构性设计模式(针对类与对象的组织结构)
设计模式
Asort5 小时前
JavaScript设计模式(四)——建造者模式:优雅构建复杂对象的实用指南
前端·javascript·设计模式
星空寻流年6 小时前
设计模式第四章(组合模式)
设计模式·组合模式
笨手笨脚の6 小时前
设计模式-组合模式
设计模式·组合模式·结构型设计模式·设计模式之美
yujkss7 小时前
23种设计模式之【抽象工厂模式】-核心原理与 Java实践
java·设计模式·抽象工厂模式
PaoloBanchero9 小时前
Unity 虚拟仿真实验中设计模式的使用 ——命令模式(Command Pattern)
unity·设计模式·命令模式
大飞pkz9 小时前
【设计模式】桥接模式
开发语言·设计模式·c#·桥接模式
BeyondCode程序员12 小时前
设计原则讲解与业务实践
设计模式·架构