單例模式定義:保證一個類僅有一個執行個體,并提供通路此執行個體的全局通路點。
專注前端與算法的系列幹貨分享,轉載請聲明出處:原文連結: xxoo521.com
什麼是單例模式?
單例模式定義:保證一個類僅有一個執行個體,并提供通路此執行個體的全局通路點。
單例模式用途
如果一個類負責連接配接資料庫的線程池、日志記錄邏輯等等,此時需要單例模式來保證對象不被重複建立,以達到降低開銷的目的。
代碼實作
需要指明的是,以下實作的單例模式均為“惰性單例”:隻有在使用者需要的時候才會建立對象執行個體。
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))
複制
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);
複制