设计模式(五)单例模式(Singleton)

设计模式(五)单例模式(Singleton)
文章图片
单例模式.png
意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
【设计模式(五)单例模式(Singleton)】适用性:
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

''' Singleton '''class Singleton(object): ''''' A python style singleton '''# 实现__new__方法 # 并在将一个类的实例绑定到类变量_instance上, # 如果cls._instance为None说明该类还没有实例化过,实例化该类,并返回 # 如果cls._instance不为None,直接返回cls._instance def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): # super并不是一个函数,是一个类名,形如super(,)事实上调用了super类的初始化函数,产生了一个super对象; # super类的初始化函数并没有做什么特殊的操作,只是简单记录了类类型和具体实例 print cls.__name__ print(type(cls)) org = super(Singleton, cls) print type(org) cls._instance = org.__new__(cls, *args, **kw) print type(cls._instance) return cls._instanceif __name__ == '__main__': class SingleSpam(Singleton): def __init__(self, s): self.s = sdef __str__(self): return self.ss1 = SingleSpam('spam') print id(s1), s1 s2 = SingleSpam('spa') print id(s2), s2 print id(s1), s1

运行结果
SingleSpam 2849827960200 spam 2849827960200 spa 2849827960200 spa

    推荐阅读