Problem :
如執行緒池(Thread pool)、快取區(Cache)、登錄(Registry)、使用者登入(Login User)等相似狀況之物件僅需建立一個,倘若大量的製造將會導致許多問題產生,如行為異常、資源使用過量亦或是結果不一致。如執行緒池(Thread pool)、快取區(Cache)、登錄(Registry)、使用者登入(Login User)等相似狀況之物件。
然而現行的程式環境,資源其實是非常有限的。因此希望這些寶貴而且稀有的記憶體、共用的區塊、以及程式片段。在存取、操作以及安全上皆僅存在一個實體。然而倘若使用「全域變數」則必須在物件一開始建立好,然而若程式過程中並沒有使用到該物件則會形成一種資源的浪費。
Solution :
- Ensure a class only has one instance, and provide a global point of access to it.
- 一個類別只有一個實例,並提供全域點存取此實例。
UML
Python
#-*- encoding: utf-8 -*-
'''
Created on 2017-01-24 23:42:45
@author: lungyu
'''
class Singleton:
__single = None
def __init__(self):
if Singleton.__single:
raise Singleton.__single
Singleton.__single = self
@staticmethod
def getSingleton():
if not Singleton.__single:
Singleton.__single = Singleton()
return Singleton.__single
def doSomething(self):
print("do something...XD")
if __name__ == '__main__':
singleton = Singleton.getSingleton()
singleton.doSomething()
文章標籤
全站熱搜
留言列表