设计模式 – 单例模式(Singleton Pattern)

内容纲要

单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这对于那些需要确保整个应用程序中只存在一个实例的对象(如配置管理器、日志记录器等)非常有用。

以下是一个Java实现的单例模式示例:

  1. 使用懒汉式单例模式:
public class Singleton {
    private static Singleton instance;

    private Singleton() {
        // 私有构造方法,防止外部实例化
    }

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

懒汉式单例模式在第一次使用时才创建实例。当多线程环境下使用时,需要在getInstance()方法上加上synchronized关键字,以确保线程安全。但这种方式可能会导致性能问题。

  1. 使用饿汉式单例模式:
public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
        // 私有构造方法,防止外部实例化
    }

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

饿汉式单例模式在类加载时就创建了实例。这种方式可以避免多线程环境下的性能问题,但是如果这个实例从未使用过,就会造成资源浪费。

  1. 使用双重检查锁定(Double-Checked Locking)单例模式:
public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {
        // 私有构造方法,防止外部实例化
    }

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

双重检查锁定方法通过减小锁的粒度来提高性能。它首先检查实例是否已创建,如果未创建,则使用同步代码块来创建实例。这种方法可以在多线程环境下保证性能和线程安全。

  1. 使用内部静态类单例模式:
public class Singleton {
    private Singleton() {
        // 私有构造方法,防止外部实例化
    }

    private static class SingletonHolder {
        private static final Singleton instance = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

内部静态类方法是一种线程安全且资源高效的单例实现方式。它利用了类加载机制保证了实例的唯一性和线程安全,并且只有在实际使用时才会创建实例。

根据具体需求和场景,可以选择适合的单例模式实现。

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward