左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180928 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

34 | 编程范式:修饰器模式

通用性和抽象性
函数式编程的好处
修饰器模式的作用
示例:泛型问题
示例:使用pipeline
示例:HTTP路由
示例:计算时间
示例:Hello World
示例:类方式的decorator
示例:函数缓存
示例:带参数的修饰器
示例:Hello World
函数式编程技巧
修饰器语法糖
文章目录
小结
Go语言的Decorator
Python的Decorator
修饰器模式

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
在上一讲中,我们领略了函数式编程的趣味和魅力,主要讲了函数式编程的主要技术。还记得有哪些吗?递归、Map、Reduce、Filter 等,并利用 Python 的 Decorator 和 Generator 功能,将多个函数组合成了管道。
此时,你心中可能会有个疑问,这个 decorator 又是怎样工作的呢?这就是本文中要讲述的内容,“Decorator 模式”,又叫“修饰器模式”,或是“装饰器模式”。

Python 的 Decorator

Python 的 Decorator 在使用上和 Java 的 Annotation(以及 C# 的 Attribute)很相似,就是在方法名前面加一个 @XXX 注解来为这个方法装饰一些东西。但是,Java/C# 的 Annotation 也很让人望而却步,太过于复杂了。你要玩它,需要先了解一堆 Annotation 的类库文档,感觉几乎就是在学另外一门语言。
而 Python 使用了一种相对于 Decorator Pattern 和 Annotation 来说非常优雅的方法,这种方法不需要你去掌握什么复杂的 OO 模型或是 Annotation 的各种类库规定,完全就是语言层面的玩法:一种函数式编程的技巧。
这是我最喜欢的一个模式了,也是一个挺好玩儿的东西,这个模式动用了函数式编程的一个技术——用一个函数来构造另一个函数。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

修饰器模式在Python和Go语言中的应用是本文的重点。文章通过丰富的代码示例和详细的解释,生动地介绍了修饰器模式的工作原理和应用技巧。在Python中,修饰器模式通过装饰函数和类的方式实现,作者展示了修饰器的基本语法、回调机制、带参数的修饰器以及类方式声明修饰器的执行顺序。此外,还介绍了通过URL路由调用注册函数的实际示例。在Go语言中,虽然没有修饰器语法糖,但通过高阶函数和匿名函数的组合,也能实现类似的功能。作者展示了在Go语言中使用高阶函数实现修饰器的方法,并通过示例展示了修饰器的嵌套和组合。同时,文章还探讨了Go语言中修饰器模式的局限性,提出了使用反射机制实现通用修饰器的方法。总的来说,本文通过对Python和Go语言中修饰器模式的深入讲解,为读者提供了全面了解修饰器模式的机会,展示了修饰器模式在不同语言中的灵活应用和技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(29)

  • 最新
  • 精选
  • 楊_宵夜
    越看越觉得装饰器模式是属于AOP思想的一种实现🤔。
    2018-02-02
    5
    42
  • 陈华
    ...感觉还是转行算了....,
    2019-06-20
    1
    25
  • minghu6
    其实Java装饰器和Python装饰器还是差别挺大的,Python装饰器是一个高阶函数,Java的则真的是"注解",只是起到一个打标签的作用,还要另外的类来检查特定标签进行特定处理。
    2018-02-14
    1
    16
  • 麻花快跑
    耗子叔,我看你博客和文章很久了,从coolshell就开始了,现在也快30了,但是越来越焦虑,他们都说是30岁程序员的普遍情况,希望耗子叔能以过来人的身份写下这方面的文章,为我们指点下迷路
    2018-01-25
    2
    11
  • seedjyh
    理解python的函数型装饰器,关键就是分清3个函数。 - 被装饰的函数 raw_fn - 装饰后的函数 new_fn - 执行装饰的函数 decoractor_fn 其中,raw_fn 和 new_fn 的函数签名(参数和返回值)是相同的,就是一连串@之后真正手写def的那个函数。 decoractor_fn 的参数是 raw_fn,在内部定义new_fn并返回之。 至于带参数的装饰器,其实就是产生装饰器的工厂,本身并不是装饰器。 decoractor_factory的参数可以随便写,其内部定义一个decoractor_fn并返回。 类模式的装饰器有点像C++的仿函数。 Golang的装饰器,在框架echo的middleware这里体现得淋漓尽致。
    2021-10-19
    8
  • 少盐
    基本没看懂,后面的总结基本知道装饰器是干嘛的
    2018-12-15
    7
  • 浩子
    耗子哥,文章写的很有意思。最近也在相继学习Go语言。 不过我很纠结,我是一名.net的技术主管,最近想开拓其他语言的方向。可是却不知道从何下手,比较感兴趣的有Go,Java,Python。可是时间总是有限的。 不知道从哪面方面进行深入研究。
    2018-01-25
    2
    7
  • edisonhuang
    通过装饰器,我们很容易的给代码添加一些功能,附加执行一些操作。然后深入之后发现装饰器可以修饰任何函数,加不同函数随意组合和拼装往往会带来一些神奇的效果,恰如linux的编码哲学,一个工具只做一件事并把这件事做到极致。 通过装饰器的封装,我们可以把很多业务逻辑,重复代码给消除,从而优化代码
    2019-06-21
    3
  • 拉欧
    这一章的内容真带劲
    2019-05-27
    3
  • go语言的第一个例子让我联想到java的静态代理,后面反射的例子让我联想到java的动态代理
    2018-09-19
    3
收起评论
显示
设置
留言
29
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部