單例模式(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 三種單例模式實現
因為在設計或開發中,肯定會有這麼一種情況,乙個類只能有乙個物件被建立,如果有多個物件的話,可能會導致狀態的混亂和不一致。這種情況下,單例模式是最恰當的解決辦法。它有很多種實現方式,各自的特性不相同,使用的情形也不相同。今天要實現的是常用的三種,分別是餓漢式 懶漢式和多執行緒式。通過單例模式,可以做到...
單例模式的三種實現方法
在實際開發中,我們往往需要乙個類只能被例項化一次,如果有多個物件的話,就會導致混亂情況發生。優點 一 例項控制 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。二 靈活性 因為類控制了例項化過程,所以類可以靈活更改例項化過程。一 開銷 雖然數量很少,但如果每次物件...