每天一個(gè)設(shè)計(jì)模式之單例模式
博主按:《每天一个设计模式》旨在初步领会设计模式的精髓,目前采用
javascript
(靠这吃饭)和python
(纯粹喜欢)两种语言实现。诚然,每种设计模式都有多种实现方式,但此小册只记录最直截了当的实现方式 :)
- 网速过慢的朋友请移步《每天一个设计模式之单例模式》原文地址
- 欢迎来我的小站看更多干货 + 免费教程:godbmw.com
0. 项目地址
1. 什么是单例模式?
单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。
2. 单例模式用途
如果一个类负责连接数据库的线程池、日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。
3. 代码实现
需要指明的是,以下实现的单例模式均为“惰性单例”:只有在用户需要的时候才会创建对象实例。
3.1 python3 实现
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 实现
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);
點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)