资讯专栏INFORMATION COLUMN

设计模式笔记python实现

raledong / 3258人阅读

摘要:设计模式学习装饰器模式这个在我的笔记中有介绍工厂模式未完成,待更新单例模式保证一个对象最多只有一个实例存在。对安全性要求较高的场景,比如银行的修改余额业务。如果我们不使用单例模式,那么就会创建三个不同的实例。

设计模式学习 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="
")
# 比较三个引用是否相同
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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44931.html

相关文章

  • 流畅的python读书笔记-第十章-继承优缺点

    摘要:继承的优缺点推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架。多重继承的真实应用多重继承能发挥积极作用。即便是单继承,这个原则也能提升灵活性,因为子类化是一种紧耦合,而且较高的继承树容易倒。 继承的优缺点 推出继承的初衷是让新手顺利使用只有专家才能设计出来的框架。——Alan Kay 子类化内置类型很麻烦 (如 list 或 dict)) ,别搞这种 直接子类化内置类型(如 ...

    morgan 评论0 收藏0
  • python学习笔记- 多线程

    摘要:也提供多线程支持,而且中的线程并非是模拟出来的多线程,而是系统级别的标准库提供了两个模块和。同一个变量,线程则会互相共享。例如多个线程对银行中的某一个账户进行操作。但是实际情况是随意切换线程。说到的多线程编程,就会绕不过。 该文章参考了http://www.liaoxuefeng.com/wi... 廖雪峰的教程。 一个进程至少有一个线程。Python也提供多线程支持,而且Python...

    RiverLi 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • python学习笔记 - 文件读写

    摘要:文件打开的方式有多种。读取模式写入模式。若文件不存在,则会创建文件。但是文件必须已经存在。模式文件的读写是文本模式,这就意味着会把转换成平台相关的换行符。 现代的操作系统其实都不允许程序直接读写系统中的文件,而是程序通过请求系统打开一个文件对象,然后再对文件对象进行读写。 import logging try: f = open(getAttar.py, r) con...

    马永翠 评论0 收藏0

发表评论

0条评论

raledong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<