当前位置: 首页> 科技> IT业 > 单例模式(Singleton Pattern)

单例模式(Singleton Pattern)

时间:2025/7/12 15:44:34来源:https://blog.csdn.net/m0_65347933/article/details/141000049 浏览次数:0次

目录

一、单例模式的实现方式

1. 懒汉式(Lazy Initialization)

(1)代码   

(2)缺点

2. 线程安全的懒汉式

(1)代码

(2)缺点

3. 双重检索锁(Double-Check Locking)

  代码

4. 饿汉式(Hungry Initialization)

(1)代码

(2)优点

5. 使用枚举

  代码

二、使用单例模式的注意事项

1、序列化保护

2、懒加载和性能

3、内存泄露


单例模式是设计模式中的一种重要模式,主要用于确保一个类只有一个实例,并提供一个全局访问点。它在许多场景中都非常有用,比如在配置管理、线程池、日志记录等中。

一、单例模式的实现方式

单例模式通常有几种常见的实现方式:

1. 懒汉式(Lazy Initialization)

在这种实现方式中,单例实例是在第一次使用时创建的,直到那时才实例化。这种方式是延迟加载。

(1)代码   
public class Singleton {private static Singleton instance;private Singleton() {// 私有构造函数防止外部实例化}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}
(2)缺点

        在多线程环境下,可能会导致创建多个实例。

2. 线程安全的懒汉式

   为了在多线程环境中确保安全,可以使用 synchronized 关键字

(1)代码
public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}
(2)缺点

        每次调用 getInstance 时都需要加锁,可能影响性能。

3. 双重检索锁(Double-Check Locking)

   通过双重检查来减少同步开销
   public class Singleton {
       private static Singleton instance;

代码
   private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}}
4. 饿汉式(Hungry Initialization)

实例在类加载时创建,不需要延迟加载。

(1)代码
  public class Singleton {// 静态实例在加载的时候创建private static final Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}}
(2)优点

        线程安全,简单;缺点是在类加载时就创建了实例,可能会浪费资源。

5. 使用枚举

   Java的枚举可以很好地实现单例模式,既简单又线程安全。

代码
 public enum Singleton {INSTANCE;public void someMethod() {// 业务逻辑}}

二、使用单例模式的注意事项

1、序列化保护

如果单例类实现了`Serializable`接口,必须定义`readResolve`方法,以防止在反序列化时创建新的实例。

2、懒加载和性能

 选择懒加载时要考虑性能问题,尤其是在多线程环境中。

3、内存泄露

确保使用强引用,不要因单例导致内存泄露。


 

关键字:单例模式(Singleton Pattern)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: