每天一个设计模式之单例模式

> 博主按:[《每天一个设计模式》](https://godbmw.com/category/每天一个设计模式)旨在初步领会设计模式的精髓,目前采用`javascript`(_靠这吃饭_)和`python`(_纯粹喜欢_)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :) 1. 网速过慢的朋友请移步[《每天一个设计模式之单例模式》原文地址](https://godbmw.com/passage/80) 2. **欢迎来我的小站看更多干货 免费教程:[godbmw.com](https://godbmw.com/)** ## 0. 项目地址 - [本节课源码地址](https://github.com/dongyuanxin/design-pattern-demos/tree/master/singleton_parttern) - [《每天一个设计模式》地址](https://godbmw.com/category/每天一个设计模式) ## 1. 什么是单例模式? > 单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。 ## 2. 单例模式用途 如果一个类负责连接数据库的线程池、日志记录逻辑等等,**此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。** ## 3. 代码实现 > 需要指明的是,**以下实现的单例模式均为“惰性单例”:只有在用户需要的时候才会创建对象实例。** ### 3.1 python3 实现 ```python class Singleton: # 将实例作为静态变量 __instance = None @staticmethod def get_instance(): if Singleton.__instance == None: # 如果没有初始化实例,则调用初始化函数 # 为Singleton生成 instance 实例 Singleton() return Singleton.__instance def __init__(self): if Singleton.__instance != None: raise Exception("请通过get_instance()获得实例") else: # 为Singleton生成 instance 实例 Singleton.__instance = self if __name__ == "__main__": s1 = Singleton.get_instance() s2 = Singleton.get_instance() # 查看内存地址是否相同 print(id(s1) == id(s2)) ``` ### 3.2 javascript 实现 ```javascript const Singleton = function() {}; Singleton.getInstance = (function() { // 由于es6没有静态类型,故闭包: 函数外部无法访问 instance let instance = null; return function() { // 检查是否存在实例 if (!instance) { instance = new Singleton(); } return instance; }; })(); let s1 = Singleton.getInstance(); let s2 = Singleton.getInstance(); console.log(s1 === s2); ```
更多专业前端知识,请上 【猿2048】www.mk2048.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值