單例模式就是一種建立型模式,可以讓類有且只有乙個物件,並提供全域性訪問,每次例項化物件都是返回的同乙個物件,並且屬性和方法都是相同的,指向位址也是相同的。
1.第一種方法:使用裝飾器
2.第二種方法:使用基類new是真正建立例項物件的方法,所以重寫基類的new方法,以此保證建立物件的時候只生成乙個例項。def
singleton
(cls)
: instances =
def(
*args,
**kwargs)
:if cls not
in intances:
instances[cls]
= cls(
*args,
**kwargs)
return instances[cls]
@singleton
class
foo(
object):
pass
foo1 = foo(
)foo2 = foo(
(foo1 = foo2)
# true
3.第三種方法:元類,元類是用於建立物件的類,類物件建立例項物件時一定要呼叫的call方法,因此在呼叫call方法時候保證始終只建立乙個例項即可,type是python的元類。class
singleton
(object):
def__new__
(cls,
*args,
**kwargs):if
nothasattr
(cls,
*args,
**kwargs)
: cls._instance =
super
(singleton,cls)
.__new__(cls,
*args,
**kwargs)
reeturn cls._instance
class
foo(singleton)
:pass
foo1 = foo(
)foo2 = foo(
(foo1 is foo2)
# true
class
singleton
(type):
def__call__
(cls,
*args,
**kwargs):if
nothasattr
(cls,
'_instance'):
cls._instance =
super
(singleton,cls)
.__call__(
*args,
**kwargs)
return cls._instance
# python2
class
foo(
object):
__metaclass__ = singleton
#python3
class
foo(metaclass = singleton)
:pass
foo1 = foo(
)foo2 = foo(
(foo1 is foo2)
# true
單例模式的三種實現
class singleton public static singleton getinstance 缺點 類每次使用時都會初始化靜態成員變數 呼叫該類的其它方法時也會初始化 浪費記憶體。class singleton public static singleton getinstance ret...
c 三種單例模式實現
因為在設計或開發中,肯定會有這麼一種情況,乙個類只能有乙個物件被建立,如果有多個物件的話,可能會導致狀態的混亂和不一致。這種情況下,單例模式是最恰當的解決辦法。它有很多種實現方式,各自的特性不相同,使用的情形也不相同。今天要實現的是常用的三種,分別是餓漢式 懶漢式和多執行緒式。通過單例模式,可以做到...
單例模式的三種實現方法
在實際開發中,我們往往需要乙個類只能被例項化一次,如果有多個物件的話,就會導致混亂情況發生。優點 一 例項控制 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。二 靈活性 因為類控制了例項化過程,所以類可以靈活更改例項化過程。一 開銷 雖然數量很少,但如果每次物件...