螺竹编程
发布于 2024-05-26 / 4 阅读
0

设计模式/创建型:单例模式

单例模式(Singleton Pattern)是一种创建型模式,它保证一个类只有一个实例,并提供全局唯一的访问点。

单例模式的实现通常包括以下几个要素:

  1. 私有化构造方法(Private Constructor):防止外部代码创建实例。

  2. 静态变量(Static Variable):保存单例对象的引用。

  3. 静态方法(Static Method):提供全局唯一的访问点。

单例模式通常有两种实现方式:

  1. 饿汉式单例模式(Eager Singleton Pattern):在类加载时就创建单例对象,保证线程安全。

public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {}

    public static EagerSingleton getInstance() {
        return instance;
    }
}
  1. 懒汉式单例模式(Lazy Singleton Pattern):在第一次使用时创建单例对象,需要考虑线程安全问题。

public class LazySingleton {
    private static volatile LazySingleton instance;

    private LazySingleton() {}

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

在上面的两个例子中,私有化构造方法和静态方法提供了全局唯一的访问点。静态变量保存了单例对象的引用。饿汉式单例模式在类加载时就创建了单例对象,保证了线程安全。懒汉式单例模式在第一次使用时才会创建单例对象,需要考虑线程安全问题,可以使用双重检查锁定等技术来保证线程安全。

单例模式的优点是可以保证一个类只有一个实例,并提供全局唯一的访问点。这样可以避免多个实例造成的资源浪费和数据不一致的问题。单例模式还可以将代码与全局数据实现解耦,使代码更加灵活。但是,单例模式也可能造成单例对象的生命周期过长,导致资源无法及时释放。同时,单例对象的状态可能会被其它对象共享,需要注意对象状态的一致性问题。