这个在个人笔记中有介绍python
author : liibn
time :2018-11-6
未完成,待更新设计模式
保证一个对象最多只有一个实例存在。若是在有多个建立实例的语句,只有第一次的会真正的建立实例,后面的语句会返回第一次建立的实例。
适合的场景:安全
python使用装饰器简单的实现一下,这个没有考虑多线程的状况,并不完美。多线程
# 单例模式装饰器 def Singleton(cls): _instance = {} def _singleton(*args, **kargs): if cls not in _instance: _instance[cls] = cls(*args, **kargs) return _instance[cls] return _singleton 编写测试类 @Singleton class A: def __init__(self, x): self.x = x print(self.x)
测试写好的装饰器学习
# 实例化 a_one = A('one') a_two = A('two') a_three = A('three') # 打印实例的地址 print(a_one, a_two, a_three, sep='\n') # 比较三个引用是否相同 print(a_one is a_two is a_three)
输出以下:测试
one
<__main__.A object at 0x000001FB17894D68>
<__main__.A object at 0x000001FB17894D68>
<__main__.A object at 0x000001FB17894D68>
True
这里的a_one
, a_two
, a_three
三个引用指向了同一个实例。
若是咱们不使用单例模式,那么就会建立三个不一样的实例。接下来注释掉@Singleton
再次运行代码,输出以下:线程
one two three <__main__.A object at 0x000001D772F24DA0> <__main__.A object at 0x000001D772F24EB8> <__main__.A object at 0x000001D772F2D518> False