1. 程式人生 > >分分鐘帶你理解單例

分分鐘帶你理解單例

__name__ col ins 導致 per pre 服務 內容 pri

單例模式的講解以及用處

什麽是單例模式用處何在?

答:單例模式(Singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實列存在,當你希望整個系統中只能出現一個實列時,這個時候單例對象就可以派上用場了。

舉個列子!!

比如、某個服務器程序的配置信息存放在一個文件中,客戶端通過一個AppConfig的類來讀取配置文件的信息。如果在程序運行期間,有很多地方都需要使用配置文件的內容,也就是說,很多地方都需要創建AppConfig對象實列,這就導致系統中存在多個AppConfig的實列對象,而這樣會嚴重浪費內存資源,尤其是在配置文件內容很多的情況下,事實上類似AppConfig這樣的類,我們希望在程序運行期間只存在一個實例對象。

用 __new__來創建單例

如果想使得某個類從始至終最多只有一個實例,使用__new__方法會很簡單,Python中類是通過__new__來創建實例的。

 1 class A(object):
 2     def __new__(cls, *args, **kwargs):
 3         if not hasattr(cls,_inst):
 4             cls._inst = super(A, cls).__new__(cls, *args, **kwargs)
 5         return cls._inst
 6 if __name__
== __main__: 7 class B(A): 8 def __init__(self,s): 9 self.s = s 10 ret = A() 11 ret1 = B(two) 12 print id(ret),ret 13 print id(ret1),ret1.s 14 15 #結果 16 53445264 <__main__.A object at 0x032F8290> 17 53445392 two

通過__new__方法,將類的實例在創建的時候綁定到類屬性_inst,如果cls._inst為None,說明類還沒實例化,實列化並將實例綁定到cls._inst,以後每次實例化的時候都返回第一次實列化創建的實例,註意從A派生子類的時候,不要重載__new__。

分分鐘帶你理解單例