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

python單例模式實例分析

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

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

__new__()在__init__()之前被調用,用于生成實例對象。利用這個方法和類的屬性的特點可以實現設計模式的單例模式。單例模式是指創(chuàng)建唯一對象,單例模式設計的類只能實例化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

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

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

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

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

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

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

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

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

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

優(yōu)點:

一、實例控制

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

二、靈活性

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

缺點:

一、開銷

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

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

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

三、對象生存期

不能解決刪除單個對象的問題。在提供內存管理的語言中(例如基于.NET Framework的語言),只有單例類能夠導致實例被取消分配,因為它包含對該實例的私有引用。在某些語言中(如 C++),其他類可以刪除對象實例,但這樣會導致單例類中出現懸浮引用。

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

相關文章

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

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

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

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

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

    python實現差分隱私Laplace機制詳解

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

    Python使用openpyxl批量處理數據

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

    如何使用selenium和requests組合實現登錄頁面

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

    tkinter如何實現打開文件對話框并獲取文件絕對路徑

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

    Python不使用int()函數把字符串轉換為數字的方法

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

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

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

    python使用fork實現守護進程的方法

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

    Tensorflow使用Anaconda、pycharm安裝記錄

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

最新評論