設計模式之單例模式(python實現)

來源:互聯網
上載者:User

本小節要介紹的設模式是:單例模式

個人認為,單例模式是所有的設計模式中較為簡單的一個模式,但別看它簡單,在實際的應用中卻實使用得相當廣泛。

單例模式主要被應用在這樣的情境中:在程式的運行過程中始終保持一個對象。如線程池,註冊表,緩衝管理。這些對象如果在程式中保持多個執行個體,那麼在程式的運行中會出現許多問題。

下面給出單例模式的一個簡單定義:

確保一個類只有一個執行個體,並提供一個全域的訪問點

說到這裡,你可能會一下想到一個概念:全域變數。

的確,全域變數也可以實現一個類似於單例的功能,但全域變數在程式的一開始就會被執行個體化。如果這個全域變數在程式的運行過程中一次也沒有被用到,那這個全域變數所佔用的資源就會被白白地浪費掉。因此全域變數是無法做到申請時建立的。

好了,話不多說,看代碼吧:

class Singleton(object):    ''' A python style singleton '''    def __new__(cls, *args, **kw):        if not hasattr(cls, '_instance'):            org = super(Singleton, cls)            cls._instance = org.__new__(cls, *args, **kw)        return cls._instanceif __name__ == '__main__':    class SingleSpam(Singleton):        def __init__(self, s):            self.s = s        def __str__(self):            return self.s    s1 = SingleSpam('spam')    print id(s1), s1    s2 = SingleSpam('spa')    print id(s2), s2    print id(s1), s1


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.