📜  单例设计模式 |介绍(1)

📅  最后修改于: 2023-12-03 14:50:28.177000             🧑  作者: Mango

单例设计模式

简介

单例设计模式是一种常见的软件设计模式,目的是确保一个类只有一个实例,并提供一个全局访问点。

使用场景

在以下场景中,使用单例设计模式可以带来一些好处:

  1. 需要频繁创建和销毁对象时,单例模式可以提高性能。
  2. 在整个系统中,某个类的实例只需要存在一个的时候,可以使用单例模式。
  3. 当多个对象需要共享某个资源时,使用单例模式可以避免资源冲突问题。
实现方式
懒汉式单例模式

懒汉式是指在第一次使用对象时才会创建实例。以下是一个懒汉式单例模式的实现示例:

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

在以上代码中,getInstance() 方法通过判断 instance 是否为 null,如果为 null 则创建一个新实例,否则直接返回现有实例。

饿汉式单例模式

饿汉式是指在类加载时就会创建实例。以下是一个饿汉式单例模式的实现示例:

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

    private Singleton() {}

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

在以上代码中,instance 在类加载时就被实例化,因此在多线程环境下也能保证只有一个实例。

双重检查锁定单例模式

双重检查锁定单例模式是对懒汉式的改进,可以提高性能。以下是一个双重检查锁定单例模式的实现示例:

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;
    }
}

在以上代码中,使用了双重检查来确保只有一个实例。其中 volatile 关键字用于保证多线程环境下的可见性和有序性。

总结

单例设计模式可以保证一个类只有一个实例,并提供全局访问点。在不同的场景下,可以选择不同的实现方式来满足需求。以上提供的示例代码可以用来参考和学习。