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()

 

arrow
arrow
    創作者介紹
    創作者 Lung-Yu,Tsai 的頭像
    Lung-Yu,Tsai

    Lung-Yu,Tsai 的部落格

    Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣()