设计模式(五)单例模式(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
推荐阅读
- android第三方框架(五)ButterKnife
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 【故障公告】周五下午的一次突发故障
- 华为旁!大社区、地铁新盘,佳兆业城市广场五期!
- 五年后,我要成为独立自强自信的女性
- 二十年后的家乡
- 《格列佛游记》第二卷第五章概括
- 六月更新的......
- 2021-05-05五一的五天假期结束了
- 阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15|阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15 20191025