欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python單例模式實例分析

 更新時間:2015年04月08日 11:05:26   作者:huaweitman  
這篇文章主要介紹了python單例模式,實例分析了單例模式的原理與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了python單例模式。分享給大家供大家參考。具體分析如下:

__new__()在__init__()之前被調(diào)用,用于生成實例對象。利用這個方法和類的屬性的特點可以實現(xiàn)設(shè)計模式的單例模式。單例模式是指創(chuàng)建唯一對象,單例模式設(shè)計的類只能實例化1個對象。 

class Singleton(object):
  __instance=None
  def__init__(self): 
    pass
  def__new__(cls,*args,**kwd):
    if Singleton.__instance is None: 
      Singleton.__instance=object.__new__(cls,*args,**kwd)
    return Singleton.__instance

單例模式是一種常用的軟件設(shè)計模式。在它的核心結(jié)構(gòu)中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統(tǒng)中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數(shù)的控制并節(jié)約系統(tǒng)資源。如果希望在系統(tǒng)中某個類的對象只能存在一個,單例模式是最好的解決方案。

顯然單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創(chuàng)建這個實例;三是它必須自行向整個系統(tǒng)提供這個實例。

從具體實現(xiàn)角度來說,就是以下三點:一是單例模式的類只提供私有的構(gòu)造函數(shù),二是類定義中含有一個該類的靜態(tài)私有對象,三是該類提供了一個靜態(tài)的共有的函數(shù)用于創(chuàng)建或獲取它本身的靜態(tài)私有對象。

在下面的對象圖中,有一個"單例對象",而"客戶甲"、"客戶乙" 和"客戶丙"是單例對象的三個客戶對象??梢钥吹?,所有的客戶對象共享一個單例對象。而且從單例對象到自身的連接線可以看出,單例對象持有對自己的引用。

一些資源管理器常常設(shè)計成單例模式。

在計算機系統(tǒng)中,需要管理的資源包括軟件外部資源,譬如每臺計算機可以有若干個打印機,但只能有一個Printer Spooler, 以避免兩個打印作業(yè)同時輸出到打印機中。每臺計算機可以有若干傳真卡,但是只應(yīng)該有一個軟件負(fù)責(zé)管理傳真卡,以避免出現(xiàn)兩份傳真作業(yè)同時傳到傳真卡中的情況。每臺計算機可以有若干通信端口,系統(tǒng)應(yīng)當(dāng)集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調(diào)用。

需要管理的資源包括軟件內(nèi)部資源,譬如,大多數(shù)的軟件都有一個(甚至多個)屬性(properties)文件存放系統(tǒng)配置。這樣的系統(tǒng)應(yīng)當(dāng)由一個對象來管理一個屬性文件。

需要管理的軟件內(nèi)部資源也包括譬如負(fù)責(zé)記錄網(wǎng)站來訪人數(shù)的部件,記錄軟件系統(tǒng)內(nèi)部事件、出錯信息的部件,或是對系統(tǒng)的表現(xiàn)進(jìn)行檢查的部件等。這些部件都必須集中管理,不可政出多頭。

這些資源管理器構(gòu)件必須只有一個實例,這是其一;它們必須自行初始化,這是其二;允許整個系統(tǒng)訪問自己這是其三。因此,它們都滿足單例模式的條件,是單例模式的應(yīng)用。

優(yōu)點:

一、實例控制

單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。

二、靈活性

因為類控制了實例化過程,所以類可以靈活更改實例化過程。

缺點:

一、開銷

雖然數(shù)量很少,但如果每次對象請求引用時都要檢查是否存在類的實例,將仍然需要一些開銷。可以通過使用靜態(tài)初始化解決此問題。

二、可能的開發(fā)混淆

使用單例對象(尤其在類庫中定義的對象)時,開發(fā)人員必須記住自己不能使用new關(guān)鍵字實例化對象。因為可能無法訪問庫源代碼,因此應(yīng)用程序開發(fā)人員可能會意外發(fā)現(xiàn)自己無法直接實例化此類。

三、對象生存期

不能解決刪除單個對象的問題。在提供內(nèi)存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠?qū)е聦嵗蝗∠峙?,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導(dǎo)致單例類中出現(xiàn)懸浮引用。

希望本文所述對大家的Python程序設(shè)計有所幫助。

相關(guān)文章

  • python實現(xiàn)機械分詞之逆向最大匹配算法代碼示例

    python實現(xiàn)機械分詞之逆向最大匹配算法代碼示例

    這篇文章主要介紹了python實現(xiàn)機械分詞之逆向最大匹配算法代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Python實現(xiàn)K-means聚類算法并可視化生成動圖步驟詳解

    Python實現(xiàn)K-means聚類算法并可視化生成動圖步驟詳解

    這篇文章主要介紹了Python實現(xiàn)K-means聚類算法并可視化生成動圖,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • python實現(xiàn)差分隱私Laplace機制詳解

    python實現(xiàn)差分隱私Laplace機制詳解

    今天小編就為大家分享一篇python實現(xiàn)差分隱私Laplace機制詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python使用openpyxl批量處理數(shù)據(jù)

    Python使用openpyxl批量處理數(shù)據(jù)

    openpyxl 是一個用于處理 xlsx 格式Excel表格文件的第三方python庫,其支持Excel表格絕大多數(shù)基本操作。本文給大家介紹Python使用openpyxl批量處理數(shù)據(jù)的操作方法,感興趣的朋友一起看看吧
    2021-06-06
  • 如何使用selenium和requests組合實現(xiàn)登錄頁面

    如何使用selenium和requests組合實現(xiàn)登錄頁面

    這篇文章主要介紹了如何使用selenium和requests組合實現(xiàn)登錄頁面,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • tkinter如何實現(xiàn)打開文件對話框并獲取文件絕對路徑

    tkinter如何實現(xiàn)打開文件對話框并獲取文件絕對路徑

    這篇文章主要介紹了tkinter實現(xiàn)打開文件對話框并獲取文件絕對路徑問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python不使用int()函數(shù)把字符串轉(zhuǎn)換為數(shù)字的方法

    Python不使用int()函數(shù)把字符串轉(zhuǎn)換為數(shù)字的方法

    今天小編就為大家分享一篇Python不使用int()函數(shù)把字符串轉(zhuǎn)換為數(shù)字的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python中第三方庫lxml庫的最新詳細(xì)安裝步驟

    python中第三方庫lxml庫的最新詳細(xì)安裝步驟

    這篇文章主要給大家介紹了關(guān)于python中第三方庫lxml庫的最新詳細(xì)安裝步驟,lxml是一種使用Python編寫的庫,可以迅速、靈活地處理 XML,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • python使用fork實現(xiàn)守護(hù)進(jìn)程的方法

    python使用fork實現(xiàn)守護(hù)進(jìn)程的方法

    守護(hù)進(jìn)程(Daemon)也稱為精靈進(jìn)程是一種生存期較長的一種進(jìn)程。它們獨立于控制終端并且周期性的執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。他們常常在系統(tǒng)引導(dǎo)裝入時啟動,在系統(tǒng)關(guān)閉時終止。
    2017-11-11
  • Tensorflow使用Anaconda、pycharm安裝記錄

    Tensorflow使用Anaconda、pycharm安裝記錄

    這篇文章主要介紹了Tensorflow使用Anaconda、pycharm安裝記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論