python 設計模式之單例模式 Singleton Pattern

 

 

 

#引入

一個類被設計出來,就意味着它具備某種行爲(方法),屬性(成員變量)。通常狀況下,當咱們想使用這個類時,會使用new 關鍵字,這時候jvm會幫咱們構造一個該類的實例。這麼作會比較耗費資源。python

若是能在jvm啓動時就new好,或者是某一次new好後之後不再用new了,這樣就能節省不少資源了。多線程

這就是單例模式要解決的問題。jvm

 

 

# 單例實現步驟

要實現一個單例類,須要通過三個步驟:ide

一、私有化構造函數,目的是避免其它類能夠建立這個類的對象;函數

二、在本類中建立惟一實例對象(由於構造函數私有化了,因此單例類的惟一實例對象只能在單例類裏面建立;),使用一個私有靜態的成員變量保存spa

三、對外提供一個公開的靜態的函數供別人獲取這個惟一實例對象線程

 

 

#單例的兩種實現方法:

1)餓漢式設計

特色:在加載類的同時就建立了這個類的惟一實例;對象

好處:可保證這個類的實例的惟一性;blog

弊端:若是隻是使用這個類,可是暫時不須要它的對象,也會建立惟一實例,形成內存的浪費;

代碼模板:

 

 

 

2)懶漢式:

特色:在第一次調用獲取實例的方法時才建立對象;

好處:第一次調用獲取實例的方法時才建立對象,能夠避免內存的浪費;

弊端:多線程環境下不能保證明例的惟一性;

代碼模板:

 

 

 

 

 

 上面兩種是從人家博客裏面截圖的,比較清晰的說明了餓漢模式和懶漢模式的區別

 

 #單例模式的優勢

1)嚴格控制對惟一的實例的訪問方式(能夠容許有限數量的實例)

2)僅有一個實例,能夠節約系統資源

 

 #單例模式的缺點

1)單例模式沒有抽象層,擴展比較困難

2)職責太重,即充當工廠角色,有充當產品角色。

3)若是長期不使用,Java會自動回收,致使下次使用又從新實例化。

 

 #單例模式的特色

1)有且僅有一個單例類實例(沒法經過反序列化從新構建對象)

2)構造函數私有化

3)經過靜態方法或枚舉得到單例類實例

 

 

#python實現單例模式

#(1)
class Test: def __new__(cls): if not hasattr(cls,'instance'): cls.instance=super(Test,cls).__new__(cls) return cls.instance obj1=Test() obj2=Test() print(obj1 is obj2) #(2) def singleton(cls): instances={} def getinstance(*args,**kwargs): if cls not in instances: instances[cls]=cls(*args,**kwargs) return instances[cls] return getinstance @singleton class MyClass: a=1 c1=MyClass() c2=MyClass() print(c1==c2)

 還有其餘的,我也不想再寫了

 

什麼是單例?爲何要用單例?

一個類被設計出來,就表明它表示具備某種行爲(方法),屬性(成員變量),而通常狀況下,當咱們想使用這個類時,會使用new關鍵字,這時候jvm會幫咱們構造一個該類的實例。而咱們知道,對於new這個關鍵字以及該實例,相對而言是比較耗費資源的。因此若是咱們可以想辦法在jvm啓動時就new好,或者在某一次實例new好之後,之後再也不須要這樣的動做,就可以節省不少資源了。


做者:jsbintask22
連接:http://www.imooc.com/article/279430
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做

什麼是單例?爲何要用單例?

一個類被設計出來,就表明它表示具備某種行爲(方法),屬性(成員變量),而通常狀況下,當咱們想使用這個類時,會使用new關鍵字,這時候jvm會幫咱們構造一個該類的實例。而咱們知道,對於new這個關鍵字以及該實例,相對而言是比較耗費資源的。因此若是咱們可以想辦法在jvm啓動時就new好,或者在某一次實例new好之後,之後再也不須要這樣的動做,就可以節省不少資源了。


做者:jsbintask22
連接:http://www.imooc.com/article/279430
來源:慕課網
本文原創發佈於慕課網 ,轉載請註明出處,謝謝合做

#參考

http://www.imooc.com/article/279430

 https://baijiahao.baidu.com/s?id=1619543284145447185&wfr=spider&for=pc

http://www.sohu.com/a/141927148_812245

相關文章
相關標籤/搜索