编程范式游记
陈皓(网名“左耳朵耗子”)
资深技术专家
立即订阅
2 人已学习
课程目录
已更新 11 讲 / 共 11 讲
01 | 编程范式游记:起源
免费
02 | 编程范式游记:泛型编程
03 | 编程范式游记:类型系统和泛型的本质
04 | 编程范式游记:函数式编程
05 | 编程范式游记:修饰器模式
06 | 编程范式游记:面向对象编程
07 | 编程范式游记:基于原型的编程范式
08 | 编程范式游记:Go 语言的委托模式
09 | 编程范式游记:编程的本质
10 | 编程范式游记:逻辑编程范式
11 | 编程范式游记:程序世界里的编程范式
编程范式游记
登录|注册

05 | 编程范式游记:修饰器模式

陈皓 2019-07-16
在上一篇文章中,我们领略了函数式编程的趣味和魅力,主要讲了函数式编程的主要技术。还记得有哪些吗?递归、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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编程范式游记》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(8)

  • Transient
    今年刚刚毕业,随着学习的越来越深入,自己看到的编程世界也越来越大,从刚开始的乱做一团的思维慢慢开始逐渐变得越来越清醒,这种自我提升带来的快感也许就是编程最大的魅力吧。
    明天正式去北京找工作,生活虽然不易,但正是因为这样才给了我们年轻人机会。未来要走的路很长,愿自己永远stay hungry stay foolish.
    2019-07-30
    1
    3
  • Curricane
    对目前的我来说,很有难度了,之前接触多的是类的装饰,这回是函数的装饰。golang部分的更好理解,毕竟没有语法糖。装饰器模式大概是把核心的函数放在最里层,在不影响这个核心函数的情况下,在外层加东西。那如何做到不影响核心函数,则要做到不管怎么在外层怎么加装饰,返回的类型都是与核心函数一样的,毕竟要做到h := decorator(h)。
    2019-07-26
    3
  • sswrock
    动态代理?
    2019-10-07
  • Neo
    某种程度上装饰器也是一种语法糖?不知道我理解的对不对
    2019-09-01
  • ティア(Erlin Ma)
    最近用Python的装饰器做了自动化测试,感觉省事不少,在这里分享一下。
    装饰器器负责循环所有测试用例,在循环内部,初始化测试状态,执行被装饰的逻辑,进行结果比对。
    当然,缺点就是不测试的时候要注释掉装饰器调用。
    2019-08-21
    2
  • neo
    感觉这里的装饰器和FP的compose是一个意思
    2019-07-30
  • 李明浩 心智英语发起人
    我怎么觉得有语法糖的东西更难读了呢?希望GO继续保持清爽。好好的语言,没事加什么潜规则?😁
    2019-07-29
  • code-artist
    java spring面世不久的时候,流行面向方面编程的概念,现在人们不怎么谈这个概念了
    2019-07-26
    1
收起评论
8
返回
顶部