设计模式学习
1.装饰器模式
这个在我的笔记中有介绍
2.工厂模式
author : liibn
time :2018-11-6
未完成,待更新
3.单例模式
保证一个对象最多只有一个实例存在。如果在有多个创建实例的语句,只有第一次的会真正的创建实例,后面的语句会返回第一次创建的实例。
适合的场景:
- 某些实例的创建很耗费系统资源。
- 对安全性要求较高的场景,比如银行的修改余额业务。
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