单例模式怎么用

单例模式的核心是确保一个类只有一个实例,并且提供全局访问点。用在需要共享资源的地方,比如配置文件读取、数据库连接池。

怎么用?

  1. 私有化构造函数:防止外部通过 new 创建新实例。
  2. 内部创建静态实例:在类里定义一个静态变量保存唯一实例。
  3. 提供静态方法获取实例:外部只能通过这个方法拿到这个唯一实例。

常见写法(以Python和Java为例):

  • Python 简单版:用模块导入本身就是单例,或者用 __new__ 方法控制。

    class Singleton:
        _instance = None
        def __new__(cls, *args, **kwargs):
            if not cls._instance:
                cls._instance = super().__new__(cls)
            return cls._instance
    

    使用时:s1 = Singleton(),无论创建几次,都是同一个对象。

  • Java 懒汉式(简单版):延迟加载,但多线程有风险。

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

    多线程场景建议加 synchronized 或使用饿汉式(直接 new 静态实例)。

关键点:记住单例不是“一个类只能被实例化一次”,而是“只让你拿那一个实例”。如果你真的想确保唯一,记得考虑多线程安全。