单例模式是常见的一种设计模式,它是针对类的一种描述,因此,我们可以使用python的decorator来实现通用的单例模式。
一.基本的单例模式
首先建立我们的decorator。我们需要为classType建立_instance和_lock成员:
Python
def singleton(classType):
classType._instance = None
classType._lock = Lock()
return classType
1
2
3
4
defsingleton(classType):
classType._instance=None
classType._lock=Lock()
returnclassType
然后为class建立getInstance函数:
Python
def __getInstance(classname):
if classname._instance is None:
classname._lock.acquire()
if classname._instance is None:
classname._instance = classname()
classname._lock.release()
return classname._instance
1
2
3
4
5
6
7
def__getInstance(classname):
ifclassname._instanceisNone:
classname._lock.acquire()
ifclassname._instanceisNone:
classname._instance=classname()
classname._lock.release()
returnclassname._instance
然后在我们的decorator中,将getInstance函数添加到class上:
Python
classType.getInstance = classmethod(__getInstance)
1
classType.getInstance=classmethod(__getInstance)
现在我们的代码长这样。这个decorator已经具备了基本功能:
Python
def __getInstance(classType):
if classType._instance is None:
classType._lock.acquire()
if classType._instance is None:
classType._instance = classType()
classType._lock.release()
return classType._instance
def singleton(classType):
classType._instance