设计模式——单例模式

本文详细介绍了Java中的单例模式,包括其定义、使用场景和实现关键点。讨论了懒汉式、饿汉式、双重检查锁定(DCL)、静态内部类和枚举单例五种实现方式,以及各自的优缺点。强调了线程安全和反序列化可能导致的问题,并推荐使用静态内部类单例和枚举单例作为更安全的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.单例模式介绍

单例模式是应用最广的模式,也是我最先知道的一种设计模式,在深入了解单例模式之前,每当遇到如getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式的实现。
在应用这个模式时,单例对象的类必须保证只有一个实例存在。很多时候系统只需要一个全局对象来协调系统整体的行为,比如在应用中只有一个ImageLoader实例,因为它含有线程池、缓存系统、网络请求等。像这种不能自由构造对象的情形就是单例模式的使用场景。

2.单例模式定义

保证一个类仅有一个实例,并且自行实例化向整个系统提供这个实例

3.单例模式使用场景

确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象有且只有一个。
例如:创建一个对象需要消耗的资源过多(访问IO和数据库等)

4.单例模式实现关键点

  • 构造函数不对外开放,一般为Private
  • 通过一个静态方法或者枚举返回单例类对象
  • 确保单例类的对象有且只有一个,尤其是在多线程环境下
  • 确保单例类对象在反序列化时不会重新构建对象

通过将单例类的构造函数私有化,使得客户端代码不能通过new的形式手动构造单例类的对象。单例类会暴露一个公有静态方法,客户端需要调用这个静态方法获取到单例类的唯一对象,在获取这个单例对象的过程中需要确保线程安全,即在多线程环境下构造单例类的对象也是有且只有一个,这也是单例模式实现中的难点。

5.实现方式

5.1懒汉式
  • 懒汉式代码
public class Singleton { 

    private static Singleton sInstance ; 
    private Singleton (){};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值