单例是一种设计模式,应用该模式的类只会生成一个实例。
单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例:如果实例不存在,会创建一个实例;如果已存在就会返回这个实例。因为单例是个类,所以你也可以为其提供相应的操作犯法,以便于对这个实例进行管理。
举个例子来说,比如你开发一款游戏软件,游戏中需要有“场景管理器”,这样一种东西,,用来管理游戏场景的切换、资源载入、网络连接等等任务。这个管理器需要多种方法和属性,在代码的很多地方会被调用,且被调用的必须是同一个管理器,否则既容易产生冲突,也会浪费资源。这种情况下,单例模式就是一个很好的实现方法。
以下是实现方法索引:
- 使用函数装饰器实现单例
- 使用类装饰器实现单例
- 使用new关键字实现单例
- 使用metaclass实现单例
使用函数装饰器实现单例
def singleton(cls):
_instance = {
}
def inner():
if cls not in _instance:
_instance[cls] = cls()
return _instance[cls]
return inner
@singleton
class Cls(object):
def __init__(self):
pass
cls1 = Cls