單例模式屬於建立型模式,它提供了一種建立物件的最佳方式。這種模式涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。
單例模式是獲取全域性狀態的一種相當好的方法,但這也是對於單例模式的主要批評之處,因為在很多情況下要盡量避免使用全域性狀態,以免在部分**中意外修改了全域性狀態,造成意料之外的結果。
不過對於資訊單向流動的情況,比如日誌記錄、快取、負載均衡和路由對映等,單例例項本身是不可變的,全域性狀態不會被改變,這些場景都是單例模式比較好的應用場景。
這裡使用python
實現乙個單例的模板類,在任何地方引用都可以獲取這個類的同乙個例項。
class
singletonobject
:class
__singletonobject
:def
__init__
(self)
: self.value =
none
def__str__
(self)
:return f" "
instance =
none
def__new__
(cls,
*args,
**kwargs):if
not cls.instance:
cls.instance = cls.__singletonobject(
)return cls.instance
def__getattr__
(self, item)
:return
getattr
(self.instance, item)
def__setattr__
(self, key, value)
:return
setattr
(self.instance, key, value)
if __name__ ==
'__main__'
: a = singletonobject(
) a.value =
"a"print
(f"a.value:"
) b = singletonobject(
) b.value =
"b"print
(f"a.value:"
)print
(f"b.value:"
)
**中使用__new__
方法控制類的例項化過程,如果該類已經例項化,則返回之前的例項,如果沒有就建立乙個例項。__new__
方法是乙個類方法,每次例項化類的時候都會呼叫該方法建立例項。
可以在類中實現私有類,實際的功能是通過私有類實現的,而外部例項的類實際上是乙個**。
Python設計模式之單例模式
站 物件 印表機 物件 使用類名 建立物件時,python 的直譯器首先 會 呼叫 new 方法為物件 分配空間。new 是乙個 由object基類提供的內建的靜態方法,主要作用有兩個 python 的直譯器獲得物件的 引用 後,將引用作為 第乙個引數,傳遞給 init 方法。重寫 new 方法 的...
python設計模式之單例模式
單例模式是一種建立型設計模式,它確保乙個類有且只有乙個特定型別的物件,並提供全域性訪問點。其意圖為 簡單理解 單例即為單個例項,也就是每次例項化建立物件時獲得的都是同乙個物件,當然同乙個物件的屬性都是相同的,方法也是相同的,位址也是相同的,這樣給我們帶來的好處就是可以避免消耗過多的記憶體或cpu資源...
Python之單例設計模式
單例是一種設計模式,應用該模式的類只會生成乙個例項。單例模式保證了在程式的不同位置都可以且僅可以取到同乙個物件例項 如果例項不存在,會建立乙個例項 如果已存在就會返回這個例項。因為單例是乙個類,所以你也可以為其提供相應的操作方法,以便於對這個例項進行管理。以下是實現方法索引 使用 new 方法在創造...