编辑推荐
随着人们对优化软件架构和设计的关注度的不断提高,软件架构师也愈发认识到在架构和设计层面,对象创建、代码结构和对象之间的交互优化的重要性。因为这样不仅能够降低软件的维护成本,而且还能确保代码的可重用性,提高代码适应变化的能力。在上一版成功的基础上,本书的第2版将利用Python 3.5来帮助读者实现现实世界的各种场景。本书首先从Python的角度对各种设计模式进行了介绍。然后,逐步带领读者深入学习单例模式、工厂模式和门面模式。之后,还介绍了如何使用代理模式来控制对象访问。此外,本书还讲解了观察者模式、命令模式和复合模式。通过阅读本书,读者能够进一步提高其在软件架构、设计和开发方面的专业技能。 本书的目标读者本书适用于软件架构师以及热衷于软件设计的Python应用开发人员。对于具有初级Python编程技能并且喜欢使用Python 3.5的工程师来说,阅读本书将更加轻松。 通过阅读本书,你将能够:提高自己的技能,创建更好的软件架构;掌握应对常见设计问题的实用性解决方案;探索构成软件设计基础的各种设计原则,如松散耦合、好莱坞原则和开放/封闭原则等;深入理解面向对象编程的概念,并掌握它们在软件开发中的应用方式;加深对创建型设计模式以及各种对象创建方法的理解,从而有助于解决软件开发过程中的相关问题;应用结构型设计模式,并掌握对象和类之间的交互方式,从而协助构建大型的应用程序;利用命令模式和观察者模式深入考察对象之间的交互;利用Python设计模式提高效率,同时提升编程技能。
内容简介
设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。本书通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例化的解析。全书囊括单例设计模式、工厂模式、门面模式、代理模式、观察者模式、命令模式、模板方法模式、复合模式、状态设计模式以及反模式等多种设计模式。本书适合那些关注软件设计原则,并想将you秀的设计模式应用到Python编程当中的读者阅读,也适合普通的软件工程师、架构师参考。
作者简介
Chetan Giridhar是一位技术领导者、开源爱好者和Python开发人员。他曾在LinuxForYou和Agile Record等杂志上发表多篇技术和开发实践方面的文章,并在Python Papers杂志上发表过技术论文。他曾在PyCon India、Asia-Pacifc和New ZealandPyCon等会议上发表演讲,并热衷于实时通信、分布式系统和云应用等领域。Chetan已经是Packt出版社的技术评审,并为 IPython Visualizations和Core Python等图书撰稿。
目录
- 第1章 设计模式简介 1
- 1.1 理解面向对象编程 1
- 1.1.1 对象 2
- 1.1.2 类 2
- 1.1.3 方法 2
- 1.2 面向对象编程的主要概念 3
- 1.2.1 封装 3
- 1.2.2 多态 3
- 1.2.3 继承 4
- 1.2.4 抽象 4
- 1.2.5 组合 5
- 1.3 面向对象的设计原则 5
- 1.3.1 开放/封闭原则 6
- 1.3.2 控制反转原则 6
- 1.3.3 接口隔离原则 6
- 1.3.4 单一职责原则 7
- 1.3.5 替换原则 7
- 1.4 设计模式的概念 7
- 1.4.1 设计模式的优点 8
- 1.4.2 设计模式的分类 9
- 1.4.3 上下文—设计模式的适用性 9
- 1.5 动态语言的设计模式 9
- 1.6 模式的分类 10
- 1.6.1 创建型模式 10
- 1.6.2 结构型模式 10
- 1.6.3 行为型模式 11
- 1.7 小结 11
- 第2章 单例设计模式 12
- 2.1 理解单例设计模式 12
- 2.2 单例模式中的懒汉式实例化 14
- 2.3 模块级别的单例模式 15
- 2.4 Monostate单例模式 15
- 2.5 单例和元类 16
- 2.6 单例模式Ⅰ 18
- 2.7 单例模式Ⅱ 20
- 2.8 单例模式的缺点 21
- 2.9 小结 22
- 第3章 工厂模式:建立创建对象的工厂 23
- 3.1 了解工厂模式 23
- 3.2 简单工厂模式 24
- 3.3 工厂方法模式 26
- 3.3.1 实现工厂方法 27
- 3.3.2 工厂方法模式的优点 29
- 3.4 抽象工厂模式 30
- 3.5 工厂方法与抽象工厂方法 33
- 3.6 小结 34
- 第4章 门面模式—与门面相适 35
- 4.1 理解结构型设计模式 35
- 4.2 理解门面设计模式 36
- 4.3 UML类图 37
- 4.3.1 门面 37
- 4.3.2 系统 38
- 4.3.3 客户端 38
- 4.4 在现实世界中实现门面模式 38
- 4.5 最少知识原则 42
- 4.6 常见问答 42
- 4.7 小结 43
- 第5章 代理模式—控制对象的访问 44
- 5.1 理解代理设计模式 44
- 5.2 代理模式的UML类图 46
- 5.3 了解不同类型的代理 47
- 5.3.1 虚拟代理 48
- 5.3.2 远程代理 48
- 5.3.3 保护代理 48
- 5.3.4 智能代理 48
- 5.4 现实世界中的代理模式 49
- 5.5 代理模式的优点 52
- 5.6 门面模式和代理模式之间的比较 52
- 5.7 常见问答 53
- 5.8 小结 53
- 第6章 观察者模式—了解对象的情况 54
- 6.1 行为型模式简介 54
- 6.2 理解观察者设计模式 55
- 6.3 现实世界中的观察者模式 58
- 6.4 观察者模式的通知方式 62
- 6.4.1 拉模型 62
- 6.4.2 推模型 62
- 6.5 松耦合与观察者模式 62
- 6.6 观察者模式:优点和缺点 63
- 6.7 常见问答 64
- 6.8 小结 64
- 第7章 命令模式—封装调用 65
- 7.1 命令设计模式简介 65
- 7.2 了解命令设计模式 66
- 7.3 实现现实世界中命令模式 69
- 7.4 命令模式的优缺点 73
- 7.5 常见问答 74
- 7.6 小结 74
- 第8章 模板方法模式—封装算法 75
- 8.1 定义模板方法模式 75
- 8.1.1 了解模板方法设计模式 77
- 8.1.2 模板方法模式的UML类图 79
- 8.2 现实世界中的模板方法模式 81
- 8.3 模板方法模式—钩子 84
- 8.4 好莱坞原则与模板方法 85
- 8.5 模板方法模式的优点和缺点 85
- 8.6 常见问答 86
- 8.7 小结 86
- 第9章 模型—视图—控制器—复合模式 87
- 9.1 复合模式简介 87
- 9.2 模型—视图—控制器模式 88
- 9.2.1 模型—了解应用程序的情况 90
- 9.2.2 视图—外观 90
- 9.2.3 控制器—胶水 90
- 9.3 MVC设计模式的UML类图 92
- 9.4 现实世界中的MVC模式 94
- 9.4.1 模块 94
- 9.4.2 MVC模式的优点 101
- 9.5 常见问答 101
- 9.6 小结 102
- 第10章 状态设计模式 103
- 10.1 定义状态设计模式 103
- 10.1.1 理解状态设计模式 104
- 10.1.2 通过UML图理解状态设计模式 105
- 10.2 状态设计模式的简单示例 106
- 10.3 状态模式的优缺点 110
- 10.4 小结 111
- 第11章 反模式 112
- 11.1 反模式简介 112
- 11.2 软件开发反模式 113
- 11.2.1 意大利面条式代码 114
- 11.2.2 金锤 114
- 11.2.3 熔岩流 115
- 11.2.4 复制粘贴或剪切粘贴式编程 115
- 11.3 软件架构反模式 116
- 11.3.1 重新发明轮子 116
- 11.3.2 供应商套牢 117
- 11.3.3 委员会设计 117
- 11.4 小结 118