左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

34 | 编程范式游记(5)- 修饰器模式

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

精选留言(15)

  • 楊_宵夜
    越看越觉得装饰器模式是属于AOP思想的一种实现🤔。
    2018-02-02
    16
  • minghu6
    其实Java装饰器和Python装饰器还是差别挺大的,Python装饰器是一个高阶函数,Java的则真的是"注解",只是起到一个打标签的作用,还要另外的类来检查特定标签进行特定处理。
    2018-02-14
    5
  • superK
    耗子叔,我看你博客和文章很久了,从coolshell就开始了,现在也快30了,但是越来越焦虑,他们都说是30岁程序员的普遍情况,希望耗子叔能以过来人的身份写下这方面的文章,为我们指点下迷路
    2018-01-25
    5
  • 浩子
    耗子哥,文章写的很有意思。最近也在相继学习Go语言。
    不过我很纠结,我是一名.net的技术主管,最近想开拓其他语言的方向。可是却不知道从何下手,比较感兴趣的有Go,Java,Python。可是时间总是有限的。 不知道从哪面方面进行深入研究。
    2018-01-25
    3
  • 杨智晓 ✟
    哎,Go语言的语法真是看着别扭,虽然知道Go强劲
    2018-11-16
    2
  • go语言的第一个例子让我联想到java的静态代理,后面反射的例子让我联想到java的动态代理
    2018-09-19
    2
  • 亮出
    编程的例子,有github么
    2018-07-26
    2
  • edisonhuang
    通过装饰器,我们很容易的给代码添加一些功能,附加执行一些操作。然后深入之后发现装饰器可以修饰任何函数,加不同函数随意组合和拼装往往会带来一些神奇的效果,恰如linux的编码哲学,一个工具只做一件事并把这件事做到极致。
    通过装饰器的封装,我们可以把很多业务逻辑,重复代码给消除,从而优化代码
    2019-06-21
    1
  • 陈华
    ...感觉还是转行算了....,
    2019-06-20
    1
  • 拉欧
    这一章的内容真带劲
    2019-05-27
    1
  • 绿茶
    基本没看懂,后面的总结基本知道装饰器是干嘛的
    2018-12-15
    1
  • 秋天
    python和go基本语法要看看上面有的函数例子,没看懂。
    2018-04-26
    1
  • 磉盘
    可以用“触类旁通”这词来形容,面向对象有修饰器模式,python和go有修饰器语法,Java有注释解。了这些概念可以更好地理解语言。就像总结里说的,他们都实现了相同的几点功能。
    2019-09-24
  • nil
    函数是一等公民,使得装饰者模式变得想当精简,使用oop实现装饰者模式就没有fp这么beautiful了,python的注解语法糖看起来想当优雅
    2019-09-13
  • Geek_0be289
    可惜的是如果高频使用反射,性能会损耗很厉害
    2019-08-06
收起评论
15
返回
顶部