设计模式笔记python实现

设计模式学习

1.装饰器模式

这个在个人笔记中有介绍python

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
相关文章
相关标签/搜索