python實現單例模式的三種方法

2021-09-24 11:46:36 字數 1403 閱讀 7654

單例模式(singleton pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當在整個系統中,某個類只能出現乙個例項時,單例物件就能派上用場。

其目的就是令到單個程序中只存在乙個類的例項,從而可以實現資料的共享,節省系統開銷,防止io阻塞等等

方法1:

使用基類 new 是真正建立例項物件的方法,所以重寫基類的new 方法,以此保證建立物件的時候只生成乙個例項

class singleton(object):

def __new__(cls, *args, **kwargs):

if not hasattr(cls, '_instance'):

cls._instance = super(singleton, cls).__new__(cls, *args, **kwargs)

return cls._instance

class foo(singleton):

pass

foo1 = foo()

foo2 = foo()

print(foo1 is foo2) # true

方法2:使用裝飾器

def singleton(cls):

instances = {}

if cls not in instances:

instances[cls] = cls(*args, **kwargs)

return instances[cls]

@singleton

class foo(object):

pass

foo1 = foo()

foo2 = foo()

print(foo1 is foo2) # true

方法3:元類,元類是用於建立類物件的類,類物件建立例項物件時一定要呼叫call方法,因此在呼叫call時候保證始終只建立乙個例項即可,type是python的元類.

class singleton(type):

def __call__(cls, *args, **kwargs):

if not hasattr(cls, '_instance'):

cls._instance = super(singleton, cls).__call__(*args, **kwargs)

return cls._instance

class foo(metaclass=singleton):

pass

foo1 = foo()

foo2 = foo()

print(foo1 is foo2) # true

單例模式的三種實現

class singleton public static singleton getinstance 缺點 類每次使用時都會初始化靜態成員變數 呼叫該類的其它方法時也會初始化 浪費記憶體。class singleton public static singleton getinstance ret...

c 三種單例模式實現

因為在設計或開發中,肯定會有這麼一種情況,乙個類只能有乙個物件被建立,如果有多個物件的話,可能會導致狀態的混亂和不一致。這種情況下,單例模式是最恰當的解決辦法。它有很多種實現方式,各自的特性不相同,使用的情形也不相同。今天要實現的是常用的三種,分別是餓漢式 懶漢式和多執行緒式。通過單例模式,可以做到...

單例模式的三種實現方法

在實際開發中,我們往往需要乙個類只能被例項化一次,如果有多個物件的話,就會導致混亂情況發生。優點 一 例項控制 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。二 靈活性 因為類控制了例項化過程,所以類可以靈活更改例項化過程。一 開銷 雖然數量很少,但如果每次物件...