單例模式:保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。
實現“某個類只有一個執行個體”途徑:
1、讓一個全域變數使得一個對象被訪問,但是它不能防止外部執行個體化多個對象。
2、讓類自身負責儲存它的唯一執行個體。這個類可以保證沒有其他執行個體可以被建立。即單例模式。
多線程時的單例模式:加鎖——雙重鎖定。
餓漢式單例類:在類被載入時就將自己執行個體化(靜態初始化)。其優點是躲避了多線程訪問的安全性問題,缺點是提前佔用系統資源。
懶漢式單例類:在第一次被引用時,才將自己執行個體化。避免開始時佔用系統資源,但是有多線程訪問安全性問題。
#encoding=utf-8##by panda#單例模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')import threading#單例類class Singleton(): instance = None mutex = threading.Lock() def __init__(self): pass @staticmethod def GetInstance(): if(Singleton.instance == None): Singleton.mutex.acquire() if(Singleton.instance == None): printInfo('初始化單例') Singleton.instance = Singleton() else: printInfo('單例已經初始化') Singleton.mutex.release() else: printInfo('單例已經初始化') return Singleton.instancedef clientUI(): Singleton.GetInstance() Singleton.GetInstance() Singleton.GetInstance() returnif __name__ == '__main__': clientUI();
類圖: