
前言
Python是一种面向对象的脚本语言,应用十分广泛。在软件工程领域,设计模式意为解决软件设计问题的方案。虽然设计模式的概念已经存在了一段时间,但它仍是软件工程领域的热门话题。设计模式能为软件开发人员提供优质的信息源,以解决他们经常碰到的问题。
本书将介绍各种设计模式,并辅以现实生活中的例子进行讲解。你将掌握Python编程的底层细节与概念,与此同时,你并不需要关注Java与C++中对相同问题的常用解法。你也会阅读到有关修改代码、最佳实践、系统架构及其设计等方面的章节。
本书将会帮助你学习设计模式的核心概念,并用其解决软件设计问题。我们将着重讨论“四人组”(GoF, Gang of Four)的设计模式——一些用于解决日常问题的设计模式的统称。它们能通过有效的响应式模式,帮助你构建有弹性、可伸缩、稳健的应用程序,并将你的编程技能提升至新的高度。阅读完本书后,你将能高效地开发应用,并解决常见的问题。同时,你也能够轻松地处理任何规模的可伸缩、可维护的项目。
读者对象
本书适合中级Python开发者阅读。没有设计模式相关知识的读者同样可以畅快地阅读本书。
本书内容
第1章“工厂模式”介绍如何使用工厂设计模式(工厂方法和抽象工厂)来初始化对象,并说明相较于直接实例化对象,使用工厂设计模式的优势。
第2章“建造者模式”对于由多个相关对象构成的对象,介绍如何简化其创建过程。
第3章“其他创建型模式”介绍如何用一些技巧解决其他对象创建问题,如使用原型模式,通过完全复制(也就是克隆)一个已有对象来创建一个新对象。你也会了解到单例模式。
第4章“适配器模式”介绍如何以最小的改变实现现有代码与外来接口(例如外部代码库)的兼容。
第5章“装饰器模式”介绍如何在不使用继承的情况下增强对象的功能。
第6章“桥接模式”介绍如何将一个对象的实现细节从其继承结构中暴露给其他对象的继承结构。这一章鼓励你进行组合而非继承。
第7章“外观模式”介绍如何创建单个入口点来隐藏系统的复杂性。
第8章“其他结构型模式”介绍享元模式、MVC(Model-View-Controller,模型-视图-控制器)模式与代理模式。享元模式通过复用对象池中的对象来提高内存利用率及应用性能。MVC模式用于桌面与Web应用开发,通过避免业务逻辑与用户界面代码的耦合,提高应用的可维护性。代理模式通过提供一个特殊对象作为其他对象的代理来控制对其他对象的访问,以降低复杂性,增强应用性能。
第9章“职责链模式”介绍另一种提高应用程序可维护性的技巧,其通过避免业务逻辑与用户界面代码的耦合,提高应用的可维护性。
第10章“命令模式”介绍如何将撤销、复制、粘贴等操作封装成对象,从而使指令的调用与执行解耦。
第11章“观察者模式”介绍如何向多个接收者发送指令。
第12章“状态模式”介绍如何创建一个状态机以对问题进行建模,并说明这种技术的优势。
第13章“其他行为型模式”介绍一些其他的高级编程技巧,包括如何基于Python创建一种简单的语言。领域专家可以使用这种语言,而不必学习Python。
第14章“响应式编程中的观察者模式”介绍如何在状态发生变化时,向已注册的相关者发送数据流与事件。
第15章“微服务与面向云的模式”介绍一些系统设计模式,其对于当今日益广泛使用的云原生应用与微服务架构十分重要。面向微服务的框架、容器和其他技术可将应用划分为功能性和技术性服务,以实现维护和部署的独立。人们越来越依赖远程服务作为应用程序的一部分(如API),这为重试机制提供了使用场景。在这些场景下,请求有可能失败,但如果多次重复请求,成功的概率就会增大。作为容错重试的补充,你将会学到如何使用断路器,这样在子系统发生故障之时不至于摧毁整个系统。在重度依赖从数据存储中获取数据的应用程序之中,使用旁路缓存模式能够通过缓存从数据存储中读取数据,从而提升性能。这种模式可以用于从数据存储中读取数据和向数据存储更新数据。最后,这一章将介绍节流模式,这一概念基于限速,或者说替代技术。你可以控制用户使用API或服务的方式,并确保你的服务不因某个特定的租户而过载。
如何充分利用本书
❑ 使用最新版本的Windows、Linux或macOS。
❑ 安装Python 3.6。同时,了解Python 3中的高级语法与新语法也十分有用。你可能还需要了解如何编写符合Python规范的代码。为此,你可以在互联网上查找相关问题的资源。
❑ 在你的计算机上安装并使用Docker,以简单地安装并运行第15章示例需要的RabbitMQ服务器。如果你选择使用Docker安装方法——打包为容器的许多服务器软件和服务愈发需要Docker安装方法,可以通过https://hub.docker.com/_/rabbitmq/和https://docs.nameko.io/en/stable/installation.html找到有用的信息。
下载示例代码
你可以从www.PacktPub.com下载本书的示例代码文件。如果你在其他地方购买了本书,可以访问www.packtpub.com/support并注册,这些文件将直接通过电子邮件发送给你。
你可以通过以下步骤下载代码文件:
❑ 在www.packtpub.com登录或注册;
❑ 选择SUPPORT标签;
❑ 点击Code Downloads & Errata;
❑ 在搜索框输入书名并遵循屏幕上的指示。
下载完文件后,确保使用如下软件的最新版本来解压或提取文件夹。
❑ Windows:WinRAR/7-Zip
❑ Mac:Zipeg/iZip/UnRarX
❑ Linux:7-Zip/PeaZip
本书的代码包也托管在GitHub上,地址为https://github.com/PacktPublishing/Mastering-Python-Design-Patterns-Second-Edition。如果代码更新了,现有的GitHub仓库上也会进行更新。
你还可以在https://github.com/PacktPublishing/上下载我们丰富的图书和视频中的其他代码包。来看看吧!
排版约定
本书中使用了许多文本样式。
文本中的代码、数据库表名等采用等宽字体。例如:“在Musician类中,主要动作是由play()方法执行的。”
代码块的格式如下:
class Musician: def __init__(self, name): self.name = name def __str__(self): return f'the musician {self.name}' def play(self): return 'plays music'
新术语、重点强调的内容,或你在屏幕上看到的内容用黑体字表示。例如,出现在文本中的菜单或对话框中的单词。例如:“远程代理充当一个对象的本地表示,该对象实际上位于不同的地址空间(例如,网络服务器)中。”
此图标表示警告或重要的注释。
此图标表示提示和技巧。
联系我们
我们始终欢迎读者的反馈。
一般反馈:发邮件到feedback@packtpub.com,并在邮件主题中注明书名。如果你对本书的任何方面有任何疑问,请通过questions@packtpub.com联系我们。
勘误:虽然我们已经竭尽全力确保内容的准确性,但错误在所难免。如果你在本书中发现了错误,请向我们报告,我们将不胜感激。请访问www.packtpub.com/submit-errata,选择你的书名,点击勘误提交表单链接,并输入详细信息。
反盗版:如果你在互联网上看到我们作品的任何形式的非法复制品,如果能向我们提供地址或网站名称,我们将不胜感激。请通过copyright@packtpub.com与我们联系。
成为作者:如果你有擅长的专题,并且对图书写作或出版感兴趣,请访问authors.packtpub.com。
评论
请留下评论。你阅读并使用本书之后,为何不在购买它的网站上留下评论呢?首先,潜在的读者可以看到并参考你的公正意见,从而做出是否购买的决定。其次,Packt出版社可以了解你对我们产品的看法。最后,作者也可以看到你对他们的书的反馈。谢谢你!
更多关于Packt的信息,请访问packtpub.com。
电子书
扫描如下二维码,即可购买本书中文电子版。
