单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。
如果一个类负责连接数据库的线程池、日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。
需要指明的是,以下实现的单例模式均为“惰性单例”:只有在用户需要的时候才会创建对象实例。
class Singleton:# 将实例作为静态变量__instance = None@staticmethoddef get_instance():if Singleton.__instance == None:# 如果没有初始化实例,则调用初始化函数# 为Singleton生成 instance 实例Singleton()return Singleton.__instancedef __init__(self):if Singleton.__instance != None:raise Exception("请通过get_instance()获得实例")else:# 为Singleton生成 instance 实例Singleton.__instance = selfif __name__ == "__main__":s1 = Singleton.get_instance()s2 = Singleton.get_instance()# 查看内存地址是否相同print(id(s1) == id(s2))
const Singleton = function() {};Singleton.getInstance = (function() {// 由于es6没有静态类型,故闭包: 函数外部无法访问 instancelet instance = null;return function() {// 检查是否存在实例if (!instance) {instance = new Singleton();}return instance;};})();let s1 = Singleton.getInstance();let s2 = Singleton.getInstance();console.log(s1 === s2);