單例模式:保證乙個類僅有乙個例項,並提供乙個訪問他的全域性訪問點。
實現某個類只有乙個例項的途徑:
1,讓乙個全域性變數使得乙個物件被訪問,但是他不能防止外部例項化多個物件。
2,讓類自身儲存他的唯一例項,這個類可以保證沒有其他例項可以被建立。
多執行緒時的單例模式:加鎖-雙重鎖定
餓漢式單例類:在類被載入時就將自己例項化(靜態初始化)。其優點是躲避了多執行緒訪問的安全性問題,缺點是提前占用系統資源。
懶漢式單例類:在第一次被引用時,才將自己例項化。避免開始時占用系統資源,但是有多執行緒訪問安全性問題。
例項:#encoding=utf-8
#單例模式
def printinfo(info):
# print unicode(info,'utf-8').decode('gbk')
print info.decode('utf-8').encode('utf-8')
import threading
#單例類
class singleton():
instance=none
mutex=threading.lock()
dwww.cppcns.comef _init__(self):
pass
@staticmethod
def getinstance():
if(singleton.instance==none):
singleton.mutex.acquire()
if(singleton.instance==none):
printinfo('初始化例項')
singleton.instance=singleton()
else:www.cppcns.com
printinfo('單例已經例項化')
singleton.mutex.release()
else:
printinfo('單例已經例項化')
return singleton.instance
def clientui():
singleton.getinstance()
singleton.getinstance()
singleton.getinstance()
return
if __nawww.cppcns.comme__=='__main__':
clientui();
結果:初始化例項 單例已經例項化 單例已經例項化
追加解釋 @staticmethod 在 python中提到 classmethod 就要提到 staticmethod,不是因為二者有什麼關係,而是為了讓使用者區分以便更清楚地寫**。在c++中,我們了解直接通過類名訪問的函式稱為類的靜態函式,即static修飾的函式,可見c++中classmethod和staticmethod是乙個概念。 那麼python中二者有什麼區別呢?程式設計客棧先來看下二者如何在python**中宣告
class myclass:
...@classmethod # classmethod的修飾符
def class_method(cls, arg1, arg2, ...):
...@staticmethod # staticmethod的修飾符
def static_method(arg1, arg2, ...):
...對於classmethod的引數,需要隱式地傳遞類名,而staticmethod引數中則不需要傳遞類名,其實這就是二者最大的區別。
二者都可以通過類名或者類例項物件來呼叫,因為強調的是classmethod和staticmethod,所以在寫代www.cppcns.com碼的時候最好使用類名,良好的程式設計習慣吧。
對於staticmethod就是為了要在類中定義而設定的,一般來說很少這樣使用,可以使用模組級(module-level)的函式來替代它。既然要把它定義在類中,想必有作者的考慮。
對於classmethod,可以通過子類來進行重定義。
提到類級別的函式,也順帶提及類級別的變數
class myclass:
i = 123 # class-level variable
def __init__(self):
self.i = 456 # object-level variable
...為了清晰地區分上面兩個i,最好的辦法就是考慮到python中的一切都是object,所以i=123屬於class object的,i=456屬於class instance object
單例模式 例項
public class readsourceutil 在類的內部定義乙個自身型別的成員 private static private static readsourceutil me instance null 將構造方法私有化 private readsourceutil public stat...
單例模式詳解
單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。1.單例模式的要點 顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。2.單例模式的優點 1.例項控制 si...
單例模式詳解
單例模式是設計模式中比較常用的,今天我要詳細的了解一下,並且進行一些比較 public class singleton public static singleton getinstance catch interruptedexception e 單例模式的精髓就在這,類的內部可以new inst...