Python中文网

推荐编程书籍:人人都懂设计模式:从生活中领悟设计模式(Python实现),由电子工业出版社2019-04-01月出版发行,本书编译以及作者信息 为:罗伟富 著,此次为第1次发行, 国际标准书号为:9787121361128,品牌为博文视点, 这本书采用平装开本为16开,纸张采为胶版纸,全书共有404页字数58万0000字,是本Python 编程相关非常不错的书。

此书内容摘要

★设计模式(Design Patterns)是一套被反复使用、多数人知晓、无数工程师实践的代码设计经验的总结,它是面向对象思想的高度提炼和模板化。本书带你一起从生活的角度思考设计模式,以轻松有趣的小故事开始,由浅入深地讲解每一种模式,思考每一种模式,总结每一种模式!力求用更通俗的语言阐述难懂的概念,用更简单的语法实现复杂的逻辑,用更短小的代码写出强悍的程序!使枯燥乏味的概念变得更有乐趣和意义,希望能带给读者一种全新的阅读体验和思考方式。

★本书分为3篇:“基础篇”讲解了23种经典设计模式,其中19种常用设计模式分别用单独的章节讲解,其余模式作为一个合集放在一章中讲解;“进阶篇”讲解了由基础设计模式衍生出的各种编程机制,包括过滤器模式、对象池技术、回调机制和MVC模式,它们在各大编程语言中都非常重要而且常见;“经验篇”结合工作经验和项目积累,分享了对设计模式、设计原则、项目重构的理解和看法。Python作为AI时代*重要的一种计算机语言,在各大语言中的排名逐年上升!本书所有示例代码均用Python编写,将会是国内不可多得的一本用Python来讲解设计模式的书。

★本书适合的读者:一线互联网软件开发者、有一定编程基础的IT职场新人、对设计模式和编程思想感兴趣的人士。

关于此书作者

罗伟富(Spencer.Luo),CSDN 博客专家,某知名在线教育公司技术专家。3年 SDK 开发,2年客户端开发,现从事后端基础技术研究,从底层到应用层,从前端到后端积累了丰富的开发经验,熟悉 C++、Java、Python、PHP 等多种不同开发语言。热爱生活、喜欢技术、善于用生活的场景解读难懂的技术!

编辑们的推荐

适读人群 :Python时代大话设计模式,概念通俗实现简单程序强悍贴近实战,从经典设计模式到衍生的各种编程机制再到经验,码农翻身及BAT众专家力荐,程序员夯实基础、扩展思路、设计更好软件必备

Python时代大话设计模式,概念通俗实现简单程序强悍贴近实战,从经典设计模式到衍生的各种编程机制再到经验,码农翻身及BAT众专家力荐,程序员夯实基础、扩展思路、设计更好软件必备。

★人工智能Python时代的大话设计模式!

★独辟蹊径,从生活中的例子出发逐渐上升概念定义

★归纳每种模式的具体应用场景、特点、注意事项等

★给出每种模式在现实中的应用案例,非常贴近实战

★归纳这个设计模式的具体应用场景、特点、注意事项

★不仅有经典设计模式,还有各种相关编程机制和经验


★设计模式涉及非常多的软件架构知识和设计思想

★设计模式利于系统便携性、健壮性、维护性、拓展性

★程序员夯实基础扩展思路谋求设计出更好的软件必备!!


人人都懂设计模式:从生活中领悟设计模式(Python实现)图书的目录

★基础篇


第0章启程之前,请不要错过我 2
0.1Python精简入门 2
0.1.1Python的特点 2
0.1.2基本语法 3
0.1.3一个例子让你顿悟 7
0.1.4重要说明 11
0.2UML精简概述 11
0.2.1UML的定义 11
0.2.2常见的关系 12
第1章监听模式 16
1.1从生活中领悟监听模式 16
1.1.1故事剧情―幻想中的智能热水器 16
1.1.2用程序来模拟生活 17
1.2从剧情中思考监听模式 19
1.2.1什么是监听模式 19
1.2.2监听模式设计思想 19
1.3监听模式的模型抽象 19
1.3.1代码框架 19
1.3.2类图 20
1.3.3基于框架的实现 21
1.3.4模型说明 22
1.4实战应用 23
1.5应用场景 26
第2章状态模式 28
2.1从生活中领悟状态模式 28
2.1.1故事剧情―人有少、壮、老,水之固、液、气 28
2.1.2用程序来模拟生活 29
2.2从剧情中思考状态模式 32
2.2.1什么是状态模式 32
2.2.2状态模式设计思想 33
2.3状态模式的模型抽象 33
2.3.1代码框架 33
2.3.2类图 35
2.3.3基于框架的实现 36
2.3.4模型说明 38
2.4应用场景 39
第3章中介模式 40
3.1从生活中领悟中介模式 40
3.1.1故事剧情―找房子问中介 40
3.1.2用程序来模拟生活 41
3.2从剧情中思考中介模式 46
3.2.1什么是中介模式 46
3.2.2中介模式设计思想 46
3.3中介模式的模型抽象 48
3.3.1代码框架 48
3.3.2类图 49
3.3.3模型说明 50
3.4实战应用 51
3.5应用场景 56
第4章装饰模式 57
4.1从生活中领悟装饰模式 57
4.1.1故事剧情―你想怎么搭就怎么搭 57
4.1.2用程序来模拟生活 58
4.2从剧情中思考装饰模式 62
4.2.1什么是装饰模式 62
4.2.2装饰模式设计思想 63
4.3装饰模式的模型抽象 64
4.3.1类图 64
4.3.2Python中的装饰器 64
4.3.3模型说明 69
4.4应用场景 70
第5章单例模式 71
5.1从生活中领悟单例模式 71
5.1.1故事剧情―你是我的唯一 71
5.1.2用程序来模拟生活 72
5.2从剧情中思考单例模式 73
5.2.1什么是单例模式 73
5.2.2单例模式设计思想 73
5.3单例模式的模型抽象 73
5.3.1代码框架 73
5.3.2类图 78
5.3.3基于框架的实现 78
5.4应用场景 79
第6章克隆模式 80
6.1从生活中领悟克隆模式 80
6.1.1故事剧情―给你一个分身术 80
6.1.2用程序来模拟生活 80
6.2从剧情中思考克隆模式 82
6.2.1什么是克隆模式 82
6.2.2浅拷贝与深拷贝 82
6.3克隆模式的模型抽象 86
6.3.1代码框架 86
6.3.2类图 86
6.3.3基于框架的实现 87
6.3.4模型说明 87
6.4实战应用 88
6.5应用场景 90
第7章职责模式 91
7.1从生活中领悟职责模式 91
7.1.1故事剧情―我的假条去哪儿了 91
7.1.2用程序来模拟生活 92
7.2从剧情中思考职责模式 96
7.2.1什么是职责模式 96
7.2.2职责模式设计思想 96
7.3职责模式的模型抽象 97
7.3.1代码框架 97
7.3.2类图 98
7.3.3基于框架的实现 99
7.3.4模型说明 102
7.4应用场景 103
第8章代理模式 104
8.1从生活中领悟代理模式 104
8.1.1故事剧情―帮我拿一下快递 104
8.1.2用程序来模拟生活 105
8.2从剧情中思考代理模式 107
8.2.1什么是代理模式 107
8.2.2代理模式设计思想 107
8.3代理模式的模型抽象 107
8.3.1代码框架 107
8.3.2类图 109
8.3.3基于框架的实现 110
8.3.4模型说明 111
8.4应用场景 111
第9章外观模式 113
9.1从生活中领悟外观模式 113
9.1.1故事剧情―学妹别慌,学长帮你 113
9.1.2用程序来模拟生活 114
9.2从剧情中思考外观模式 116
9.2.1什么是外观模式 116
9.2.2外观模式设计思想 116
9.3外观模式的模型抽象 117
9.3.1类图 117
9.3.2软件的分层结构 117
9.3.3模型说明 119
9.4实战应用 119
9.5应用场景 123
第10章迭代模式 124
10.1从生活中领悟迭代模式 124
10.1.1故事剧情―下一个就是你了 124
10.1.2用程序来模拟生活 125
10.2从剧情中思考迭代模式 128
10.2.1什么是迭代模式 128
10.2.2迭代模式设计思想 129
10.3迭代模式的模型抽象 130
10.3.1代码框架 130
10.3.2Python中的迭代器 132
10.3.3类图 136
10.3.4模型说明 137
10.4应用场景 138
第11章组合模式 139
11.1从生活中领悟组合模式 139
11.1.1故事剧情―自己组装电脑,价格再降三成 139
11.1.2用程序来模拟生活 140
11.2从剧情中思考组合模式 146
11.2.1什么是组合模式 146
11.2.2组合模式设计思想 147
11.3组合模式的模型抽象 148
11.3.1代码框架 148
11.3.2类图 149
11.3.3模型说明 150
11.4实战应用 150
11.5应用场景 153
第12章构建模式 154
12.1从生活中领悟构建模式 154
12.1.1故事剧情―你想要一辆车还是一个庄园 154
12.1.2用程序来模拟生活 155
12.2从剧情中思考构建模式 157
12.2.1什么是构建模式 157
12.2.2构建模式设计思想 157
12.2.3与工厂模式的区别 158
12.2.4与组合模式的区别 158
12.3构建模式的模型抽象 159
12.3.1类图 159
12.3.2基于框架的实现 160
12.3.3模型说明 163
12.4应用场景 164
第13章适配模式 166
13.1从生活中领悟适配模式 166
13.1.1故事剧情――有个转换器就好了 166
13.1.2用程序来模拟生活 167
13.2从剧情中思考适配模式 170
13.2.1什么是适配模式 170
13.2.2适配模式设计思想 170
13.3适配模式的模型抽象 172
13.3.1代码框架 172
13.3.2类图 172
13.3.3模型说明 173
13.4实战应用 174
13.5应用场景 184
第14章策略模式 185
14.1从生活中领悟策略模式 185
14.1.1故事剧情―怎么来不重要,人到就行 185
14.1.2用程序来模拟生活 186
14.2从剧情中思考策略模式 188
14.2.1什么是策略模式 188
14.2.2策略模式设计思想 188
14.3策略模式的模型抽象 189
14.3.1类图 189
14.3.2模型说明 190
14.4实战应用 190
14.5应用场景 195
第15章工厂模式 196
15.1从生活中领悟工厂模式 196
15.1.1故事剧情―你要拿铁还是摩卡呢 196
15.1.2用程序来模拟生活 197
15.2从剧情中思考工厂模式 199
15.2.1什么是简单工厂模式 199
15.2.2工厂模式设计思想 199
15.3工厂三姐妹 199
15.3.1简单工厂模式 200
15.3.2工厂方法模式 201
15.3.3抽象工厂模式 203
15.4进一步思考 205
15.5实战应用 205
第16章命令模式 209
16.1从生活中领悟命令模式 209
16.1.1故事剧情―大闸蟹,走起 209
16.1.2用程序来模拟生活 210
16.2从剧情中思考命令模式 213
16.2.1什么是命令模式 213
16.2.2命令模式设计思想 213
16.3命令模式的模型抽象 214
16.3.1代码框架 214
16.3.2类图 215
16.3.3模型说明 216
16.4实战应用 216
16.5应用场景 224
第17章备忘模式 225
17.1从生活中领悟备忘模式 225
17.1.1故事剧情―好记性不如烂笔头 225
17.1.2用程序来模拟生活 226
17.2从剧情中思考备忘模式 228
17.2.1什么是备忘模式 228
17.2.2备忘模式设计思想 229
17.3备忘模式的模型抽象 229
17.3.1类图 229
17.3.2代码框架 230
17.3.3模型说明 232
17.4实战应用 232
17.5应用场景 235
第18章享元模式 236
18.1从生活中领悟享元模式 236
18.1.1故事剧情―颜料很贵,必须充分利用 236
18.1.2用程序来模拟生活 237
18.2从剧情中思考享元模式 239
18.2.1什么是享元模式 239
18.2.2享元模式设计思想 239
18.3享元模式的模型抽象 239
18.3.1类图 239
18.3.2基于框架的实现 240
18.3.3模型说明 242
18.4应用场景 243
第19章访问模式 244
19.1从生活中领悟访问模式 244
19.1.1故事剧情―一千个读者一千个哈姆雷特 244
19.1.2用程序来模拟生活 245
19.2从剧情中思考访问模式 246
19.2.1什么是访问模式 246
19.2.2访问模式设计思想 247
19.3访问模式的模型抽象 247
19.3.1代码框架 247
19.3.2类图 248
19.3.3基于框架的实现 249
19.3.4模型说明 250
19.4实战应用 251
19.5应用场景 255
第20章其他经典设计模式 256
20.1模板模式 256
20.1.1模式定义 256
20.1.2类图结构 257
20.1.3代码框架 257
20.1.4应用案例 259
20.1.5应用场景 261
20.2桥接模式 261
20.2.1模式定义 261
20.2.2类图结构 261
20.2.3应用案例 262
20.2.4应用场景 266
20.3解释模式 266
20.3.1模式定义 266
20.3.2类图结构 266
20.3.3应用案例 267
20.3.4应用场景 271

★进阶篇


第21章深入解读过滤器模式 274
21.1从生活中领悟过滤器模式 274
21.1.1故事剧情―制作一杯鲜纯细腻的豆浆 274
21.1.2用程序来模拟生活 275
21.2从剧情中思考过滤器模式 275
21.2.1过滤器模式 276
21.2.2与职责模式的联系 276
21.3过滤器模式的模型抽象 276
21.3.1代码框架 277
21.3.2类图 278
21.3.3基于框架的实现 278
21.3.4模型说明 279
21.4实战应用 280
21.5应用场景 282
第22章深入解读对象池技术 283
22.1从生活中领悟对象池技术 283
22.1.1故事剧情―共享让出行更便捷 283
22.1.2用程序来模拟生活 284
22.2从剧情中思考对象池机制 287
22.2.1什么是对象池 287
22.2.2与享元模式的联系 287
22.3对象池机制的模型抽象 288
22.3.1代码框架 288
22.3.2类图 291
22.3.3基于框架的实现 292
22.3.4模型说明 294
22.4应用场景 295
第23章深入解读回调机制 296
23.1从生活中领悟回调机制 296
23.1.1故事剧情―把你的技能亮出来 296
23.1.2用程序来模拟生活 296
23.2从剧情中思考回调机制 298
23.2.1回调机制 298
23.2.2设计思想 299
23.3回调机制的模型抽象 299
23.3.1面向过程的实现方式 299
23.3.2面向对象的实现方式 300
23.3.3模型说明 301
23.4实战应用 302
23.4.1基于回调函数的实现 302
23.4.2基于策略模式的实现 303
23.4.3 回调在异步中的应用 307
23.5应用场景 310
第24章深入解读MVC模式 311
24.1从生活中领悟MVC模式 311
24.1.1故事剧情―定格最美的一瞬间 311
24.1.2用程序来模拟生活 312
24.2从剧情中思考MVC模式 316
24.2.1MVC模式 317
24.2.2与中介模式的联系 317
24.2.3与外观模式的联系 317
24.3MVC模式的模型抽象 318
24.3.1MVC 318
24.3.2MVP 318
24.3.3MVVM 319
24.3.4模型说明 320
24.4应用场景 320

★经验篇


第25章关于设计模式的理解 324
25.1众多书籍之下为何还要写此书 324
25.2设计模式玄吗 324
25.3如何区分不同的模式 325
25.4编程思想的三重境界 325
第26章关于设计原则的思考 327
26.1SOLID原则 327
26.1.1单一职责原则 327
26.1.2开放封闭原则 331
26.1.3里氏替换原则 334
26.1.4依赖倒置原则 337
26.1.5接口隔离原则 341
26.2是否一定要遵循这些设计原则 348
26.2.1软件设计是一个逐步优化的过程 348
26.2.2不是一定要遵循这些设计原则 349
26.3更为实用的设计原则 349
26.3.1LoD原则(Law of Demeter) 349
26.3.2KISS原则(Keep It Simple and Stupid) 350
26.3.3DRY原则(Don’t Repeat Yourself) 351
26.3.4YAGNI原则(You Aren't Gonna Need It) 353
26.3.5Rule Of Three原则 353
26.3.6CQS原则(Command-Query Separation) 354
第27章关于项目重构的思考 355
27.1什么叫重构 355
27.2为何要重构 355
27.3什么时机进行重构 356
27.4如何重构代码 357
27.4.1重命名 357
27.4.2函数重构 358
27.4.3重新组织数据 359
27.4.4用设计模式改善代码设计 360
27.5代码整洁之道 360
27.5.1命名的学问 360
27.5.2整洁代码的案例 362

附录A23种经典设计模式的索引对照表 368
附录BPython中__new__、__init__和__call__的用法 370
附录CPython中metaclass的原理 377

部分内容试读

三年前,CSDN推出了一个产品——ink,旨在提供一个高质量写作环境。那时,我想写一系列关于设计模式的文章,于是就在ink里开始写作,陆陆续续写了三篇文章,后来不知道什么原因这个产品下架了,我的三篇文章也没了,这事也就一直被我搁置下来。直到2017年,知识付费盛行,各类付费的社区、产品如雨后春笋般崛起,而技术类的付费阅读产品更是大行其道(GitChat便是其中一种)。在GitChat的盛情邀请之下,我写作设计模式这一系列文章的想法又重新被点燃。2017年年底,我开始在GitChat上写“从生活中领悟设计模式(Python)”课程。2018年,我对这一课程进行了一次升级。
随着这一课程被越来越多的读者熟知,不少出版社编辑找到我,他们觉得这一课程的内容非常有特色,希望能把它重新整理,仔细打磨,出版成书,于是便有了本书。
本书的特色
设计模式作为面向对象程序的设计思想和方法论,本身是非常抽象和难以理解的,需要有一定的代码量和编程经验才能更深入地理解。如果能用一种有趣的方式来讲解设计模式,将会使这些枯燥乏味的概念变得更易于理解!
本书每一章以一个轻松有趣的小故事开始,然后用代码来模拟故事剧情,再从模拟代码中逐步提炼出设计模式的模型和原理,最后配合一个具体的应用案例,告诉你每一种模式的使用方法和应用场景。以由浅入深的方式带你了解每一种模式,思考每一种模式,总结每一种模式。
本书力求用更通俗的语言阐述难懂的概念,用更简单的语法实现复杂的逻辑,用更短小的代码写出强悍的程序!希望能带给读者一种全新的阅读体验和思考方式。
内容概述
本书分为3篇:
“基础篇”讲解了23种经典设计模式,其中19 种常用设计模式分别用单独的章节讲解,其余设计模式作为一个合集放在一章中讲解;
“进阶篇”讲解了由基础设计模式衍生出的各种编程机制,包括过滤器模式、对象池技术、回调机制和MVC模式,它们在各大编程语言中都非常重要而且常见;
“经验篇”结合工作经验和项目积累,分享了对设计模式、设计原则、项目重构的理解和看法。
读者对象
一线互联网软件开发者
如果你想提升面向对象的思维方式,提高自己的软件设计能力,本书会对你非常有帮助。本书每一章会抽象和总结出对应设计模式的模型和原理,并结合具体的应用案例告诉你该模式的应用场景、特点和注意事项。
IT职场新人
如果你是IT新人,想通过学习设计模式来提升自己的技术能力和代码理解能力,本书将非常适合你。本书每一章以一个轻松有趣的小故事开始,由浅入深地讲述一个模式,让你轻松愉悦地学会每一种模式。
对设计模式和编程思想感兴趣的人士
设计模式能让你的代码具有更高的可重用性、更好的灵活性和可拓展性,更易被人阅读和理解,因此学习设计模式是每一个程序员编程生涯中必不可少的一个环节。
为什么叫设计模式
什么是设计模式
设计模式最初是由GoF于1995年提出的。GoF全称是Gang of Four(四人帮),即Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides。他们四人于1995年出版了一本书Design Patterns: Elements of Reusable Object-Oriented Software(翻译成中文是《设计模式:可复用面向对象软件的基础》),第一次将设计模式提升到理论高度,并将之规范化,该书提出了23种经典的设计模式。
设计模式是一套被反复使用、多数人知晓、无数工程师实践的代码设计经验的总结,它是面向对象思想的高度提炼和模板化。使用设计模式是为了让代码具有更高的可重用性、更好的灵活性和可拓展性,更易被人阅读和理解。
设计模式与生活有什么联系
我一直坚信:程序源于生活,又高于生活!程序的灵魂在于思维的方式,而思维的灵感来源于精彩的生活。互联网是一个虚拟的世界,而程序本身就是对生活场景的虚拟和抽象,每一种模式我都能在生活中找到它的影子。比如,说到状态模式,我能想到水有固、液、气三种状态,而人也有少、壮、老三个阶段;提起中介模式,我能立刻想到房产中介;看到装饰模式,我能联想到人的穿衣搭配……
设计模式是面向对象的高度抽象和总结,而越抽象的东西越难以理解。本书的写作目的就是降低设计模式的阅读门槛,以生活中的小故事开始,用风趣的方式,由浅入深地讲述每一种模式。让你再次看到设计模式时,不觉得它只是一种模式,还是生活中的一个“小确幸”!程序不是冷冰冰的代码,它还有生活的乐趣和特殊意义。
为什么要学设计模式
设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验总结出来的。所以不管你是新手还是老手,学习设计模式对你都有莫大的帮助。
学习设计模式的理由有很多,这里只列出几个最现实的:
(1)摆脱面试的窘境,不管你是前端工程师还是后端工程师,或是全端工程师,设计模式都是不少面试官必问的。
(2)让你的程序设计能力有一个质的提升,不再写一堆结构复杂、难以维护的烂代码。
(3)使你对面向对象的思想有一个更高层次的理解。
如何进行学习
熟悉一门面向对象语言
首先,你至少要熟悉一门面向对象的计算机语言。如果没有,请根据自己的兴趣、爱好或希望从事的工作,先选择一门面向对象语言(C++、Java、Go等都可以)进行学习和实战,对抽象、继承、多态、封装有一定的基础之后,再来阅读本书。
了解Python的基本语法
对Python的基本语法有一个简单了解。Python的语法非常简单,只要你有一定的(其他)编程语言基础,通过“第0章 启程之前,请不要错过我”的学习就能很快地理解Python的语法。
学会阅读UML图
UML(Unified Modeling Language)称为统一建模语言或标准建模语言,是面向对象软件的标准化建模语言。UML类图表示不同的实体(人、事物和数据)如何彼此相关,换句话说,它显示了系统的静态结构。想进一步了解类图中的各种关系,可参考阅读“第0章 启程之前,请不要错过我”的“0.2UML精简概述”部分。
阅读本书
通过阅读本书内容,可以轻松愉快地学习设计模式和编程思想。本书“基础篇”“进阶篇”“经验篇”的内容是逐步进阶和提升的,但每一篇内的不同章之间是没有阅读的先后顺序的(第0章和有特殊说明的除外),每一章都单独成文,可从任意一章开始阅读。例如,对于基础篇的23种设计模式,你可以从中任意挑选一章开始阅读。
为什么选择Python
虽然设计模式与编程语言没有关系,它是对面向对象思想的灵活应用和高度概括,你可以用任何一种语言来实现它,但总归是需要用一种语言进行举例的。本书的所有示例代码均使用Python编写(有特殊说明的除外),选择Python主要基于以下两个原因。
弥补市场空缺
设计模式于1995由GoF提出,被广泛应用于热门的面向对象语言。目前用Java、C++描述的设计模式的书籍和资料已经非常多了,但用Python来描述的真是太少了;我在当当网上搜索“Python设计模式”,只有零星的几本书。而对于编程语言中排名前三的Python语言,这明显是不够的。Python已经越来越成熟,也越来越多地被使用,作为一个有技术追求的IT人,有必要了解一下基于Python代码的设计模式。
大势所趋,Python已然成风
C语言诞生于1972年,却随着UNIX的诞生才深深根植于各大操作系统;C++诞生于1983年,却因微软的可视化桌面操作系统才得以广泛传播;Java诞生于1995年,却因互联网的迅速崛起才变得家喻户晓;Python诞生于1991年,而下一场技术革命已然开始,AI时代已然到来,在AI领域中已经被广泛使用的Python必将成为下一个时代的第一开发语言!
最热门的AI开源框架PyTorch和TensorFlow都已经采用了Python作为接口和开发语言。除此之外,还有一堆AI相关的框架库,也都纷纷采用了Python,如SKlearn、PyML等。一门如此有前途的语言,我们必然是要去学习和使用的。
勘误和支持
由于本人水平和经验有限,书中难免会有一些错误或理解不准确的地方,恳请广大读者批评指正。
如果你在阅读过程中发现错误,或有更好的建议,欢迎发邮件给我(E-mail:luoweifu@ 126.com,永久有效)。
最新的勘误内容可通过以下方式查看:关注公众号“SunLogging”,在菜单栏中选择“我的书箱”→“最新勘误”。
致谢
从在GitChat上写课程,到与出版社合作,写完本书的书稿,大概经历了一年半的时间,经过无数次与编辑的反复校对。写作是一件非常考验人耐心和细心的事,为了让读者更易理解,有些章节我进行了反复的推敲和修改。比如,为了讲清楚单例模式的每一种实现方式的原理,硬是增加了两个附录,阅读了十几篇文章,并做了验证性的实验,整整花了三周时间才写完。
感谢每一位在本书写作过程中给予帮助的人,是你们的鼓励和支持,才让本书能顺利完成。在此,要特别感谢电子出版社的首席策划编辑董英,在写书过中给予的诸多建议;也感谢GitChat的编辑马翠翠,在写线上课程“从生活中领悟设计模式(Python)”时给予的很多帮助;还要感谢Sophia“小朋友”,在封面设计过程中提出的非常细致的改进意见!最后,我也要感谢我的朋友和同事对我写书的鼓励和支持。
还要感谢Sophia“小朋友”,在封面设计过程中提出的非常细致的改进意见!

关于此书评价

设计模式需要程序员积累了足够代码、有了足够的开发经验以后才能融会贯通。本书独辟蹊径,从生活中的例子出发,逐渐上升到抽象的设计模式概念,给出定义及其实现,让初学者很容易理解,与此同时还给出了相应的应用案例,非常贴近实战。
——刘欣 |“码农翻身”微信公众号作者

学好设计模式能帮我们写出更好的代码,而这本书“由浅入深”的写作方式能让你轻松愉悦地进行学习。书中每章以一个轻松有趣的故事开始,讲述的是一个程序员日常的小故事,语言简练,很有画面感,所以非常容易理解;从生活的哲学中感受设计模式,这就是“由浅”。然后用简单的Python代码模拟实现生活中的场景,从而引出设计模式的模型和原理,归纳这个设计模式的具体应用场景、特点、注意事项等;从具体到抽象的提炼总结,让你洞察设计模式的本质,这就是“入深”。初学者可以通过本书非常轻松地学会各种模式,专家可以将本书作为参考书随时查阅。
——杨武兵 | 华为主任工程师

本书每章都有一个小故事,代入感比较强,很适合软件设计模式的初学者,结合故事的例子,用代码通俗易懂地把设计模式讲出来,很棒!
——兮扬 | 阿里巴巴技术专家

在互联网工程中,良好的设计模式对系统的便携性、健壮性、维护性、拓展性起着至关重要的作用。设计模式涉及非常多的软件架构知识和设计思想,面对晦涩知识时,初学者往往容易陷入迷茫。罗伟富的这本书从生活出发,用生活语言将晦涩难懂的知识娓娓道来,让人茅塞顿开,实为设计模式领域不可多得的一本好书。
——卢菁 | 腾讯高级研究员

本书把设计模式的高内聚、低耦合的设计理念,用故事情节的形式还原为真实场景,且用Python语言作为示例,简单、易学。
—— 陈志琴 | 百度手机助手研发负责人

一本好书的优秀之处在于能把高深的理论用浅白有趣的语言传达给读者,我想本书做到了这一点,因为并非科班出身的我也读得津津有味。本书从生活中提炼设计模式,看似是为了方便大家理解而采取的巧妙办法,实际上体现了面向对象编程范式的内涵,即对现实世界的模拟。所以这是一本“来源于生活,而又高于生活”的书。
——纪鹏程 | “从生活中领悟设计模式(Python)”课程读者

书摘内容

22.1从生活中领悟对象池技术


22.1.1故事剧情—共享让出行更便捷

大学室友也是死党Sam首次来杭州,作为东道主的Tony自然得悉心招待,不敢怠慢。这不,既要陪吃陪喝,还要陪玩,哈哈!

第一次来杭州,西湖是非去不可的。正值周末,风和日丽,最适合游玩。上午9点出发,Tony和Sam打一辆滴滴快车从滨江到西湖的南山路。然后从大华饭店步行到断桥,穿过断桥,漫步白堤,游走孤山岛,就这样一路走走停停,闲聊、拍照,很快就到了中午。中午他们在岳王庙附近找了一家生煎店,简单解决了午餐(大餐留着晚上吃)。因为拍照拍得比较多,手机没电了,正好看到店里有共享充电宝,便借了一个给手机充电,多休息了一个小时。下午,他们准备沿着最美的西湖路骑行。吃完午饭,他们找了两辆共享自行车,从杨公堤开始骑行,路过太子湾、雷峰塔,然后到柳浪闻莺。之后沿湖步行走到龙翔桥,找了一家最具杭州特色的饭店解决晚餐……

这一路行程从共享汽车(滴滴快车)到共享自行车,再到共享充电宝,共享的生活方式已渗透到了生活的方方面面。共享,不仅让我们出行更便捷,而且更节约资源!

22.1.2用程序来模拟生活

共享经济的飞速发展改变了我们的生活方式,例如共享自行车、共享雨伞、共享充电宝、共享KTV等。共享让我们的生活更便利,你不用带充电宝,却可以随时用到充电宝;共享让我们更节约资源,你不用买自行车,但能随时骑到自行车(一辆车可以为多个人服务)。我们以共享充电宝为例,用程序来模拟一下它是怎样做到资源节约和共享的。


源码示例22-1模拟故事剧情

class PowerBank:

"""移动电源"""

def __init__(self, serialNum, electricQuantity):

self.__serialNum = serialNum

self.__electricQuantity = electricQuantity

self.__user = ""

def getSerialNum(self):

return self.__serialNum

def getElectricQuantity(self):

return self.__electricQuantity

def setUser(self, user):

self.__user = user

def getUser(self):

return self.__user

def showInfo(self):

print("序列号:%s 电量:%d%% 使用者:%s" % (self.__serialNum, self.__electricQuantity, self.__user) )

class ObjectPack:

"""对象的包装类

封装指定的对象(如充电宝)是否正在被使用中"""

def __init__(self, obj, inUsing = False):

self.__obj = obj

self.__inUsing = inUsing

def inUsing(self):

return self.__inUsing

def setUsing(self, isUsing):

self.__inUsing = isUsing

def getObj(self):

return self.__obj

class PowerBankBox:

"""存放移动电源的智能箱盒"""

def __init__(self):

self.__pools = {}

self.__pools["0001"] = ObjectPack(PowerBank("0001", 100))

self.__pools["0002"] = ObjectPack(PowerBank("0002", 100))

def borrow(self, serialNum):

"""借用移动电源"""

item = self.__pools.get(serialNum)

result = 暂无.

if(item is 暂无.):

print("没有可用的电源!")

elif(not item.inUsing()):

item.setUsing(True)

result = item.getObj()

else:

print("%s电源 已被借用!" % serialNum)

return result

def giveBack(self, serialNum):

"""归还移动电源"""

item = self.__pools.get(serialNum)

if(item is not 暂无.):

item.setUsing(False)

print("%s电源 已归还!" % serialNum)

测试代码:

def testPowerBank():

box = PowerBankBox()

powerBank1 = box.borrow("0001")

if(powerBank1 is not 暂无.):

powerBank1.setUser("Tony")

powerBank1.showInfo()

powerBank2 = box.borrow("0002")

if(powerBank2 is not 暂无.):

powerBank2.setUser("Sam")

powerBank2.showInfo()

powerBank3 = box.borrow("0001")

box.giveBack("0001")

powerBank3 = box.borrow("0001")

if(powerBank3 is not 暂无.):

powerBank3.setUser("Aimee")

powerBank3.showInfo()

输出结果:

序列号:0001 电量:100% 使用者:Tony

序列号:0002 电量:100% 使用者:Sam

0001电源 已被借用!

0001电源 已归还!

序列号:0001 电量:100% 使用者:Aimee


人人都懂设计模式:从生活中领悟设计模式(Python实现)最新最全的试读、书评、目录、简介信息由Python中文网整理提供。