裴大头-秦可爱

裴大头-秦可爱

Java 23种设计模式——单例模式(Singleton)

发表于 2023-11-08
裴大头
阅读量 1705
更新于 2023-11-08

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

实现单例模式

在 Java 中,实现单例模式有多种方式,以下是其中两种比较常见的方式:

1. 饿汉式单例模式

public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;
    }
}
java

在饿汉式单例模式中,实例在类加载的时候就创建好。这样做的优点是实现简单,线程安全,但缺点是如果这个实例很大却没有被使用,会造成资源的浪费。

2. 懒汉式单例模式

public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
java

懒汉式单例模式在第一次获取实例的时候才进行实例化,它的优点是避免了资源浪费,但缺点是在多线程环境下会存在性能问题,因为在getInstance方法上加了synchronized关键字,导致每次调用都要进行同步操作。

当在懒汉式单例模式中加入双重检查锁(Double-Checked Locking)时,可以更好地解决多线程环境下的性能问题。以下是加入双重检查锁的懒汉式单例模式示例:

public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
java

应用场景

单例模式通常在以下场景中使用:

  • 对于频繁使用的对象,可以省去创建对象所消耗的时间,提高性能。
  • 控制资源的使用,例如数据库连接池等。

总结

单例模式是设计模式中的经典之一,它可以确保一个类只有一个实例,提供全局访问点,以及控制资源的有效利用。在实际应用中,需要根据具体的业务场景和性能要求选择合适的单例模式实现方式。 希望本文对你理解 Java 单例模式有所帮助。

Java 23种设计模式(含源码)

推荐文章
  • JavaScript 的事件循环机制

    1点赞1评论

  • Vue项目代码规范

    1点赞1评论

  • Java 23种设计模式——单例模式(Singleton)

    0点赞1评论

  • 聊一聊我的文本编辑器

    1点赞11评论

  • JavaScript的常用遍历方法整理

    1点赞8评论

Crafted with by Pei你看雪

小破站居然运行了 919 天访客 25270

© 2023 Pei你看雪鲁ICP备19037910号-2