Python單例模式例項詳解

2022-10-04 21:21:33 字數 2226 閱讀 1075

單例模式:保證乙個類僅有乙個例項,並提供乙個訪問他的全域性訪問點。

實現某個類只有乙個例項的途徑:

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...