单例模式怎么用
单例模式的核心是确保一个类只有一个实例,并且提供全局访问点。用在需要共享资源的地方,比如配置文件读取、数据库连接池。
怎么用?
- 私有化构造函数:防止外部通过
new创建新实例。 - 内部创建静态实例:在类里定义一个静态变量保存唯一实例。
- 提供静态方法获取实例:外部只能通过这个方法拿到这个唯一实例。
常见写法(以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静态实例)。
关键点:记住单例不是“一个类只能被实例化一次”,而是“只让你拿那一个实例”。如果你真的想确保唯一,记得考虑多线程安全。