python设计模式有哪些_设计模式教程

设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。

设计模式与方法或库的使用方式不同,你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码,而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。

人们常常会混淆模式和算法,因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤,而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。

算法更像是菜谱:提供达成目标的明确步骤。而模式更像是蓝图:你可以看到最终的结果和模式的功能,但需要自己确定实现步骤。

本教程特点

中文、免费、零起点、完整示例、基于最新的 Python 3 语法。图文并茂的解说,丰富的案例,真实代码实现。业界最详细,最清晰,最权威的设计模式教程。

本教程对 22 个经典设计模式以及这些模式背后的 7 个面向对象设计原则进行了说明。每章都会以一个真实世界的软件设计问题开篇,然后使用其中一个模式来解决这个问题。接着我们会详细分析该模式的结构及其变体,然后给出相应的示例代码。然后会展示该模式的不同应用,讲解如何分步骤地实现该模式,有时甚至会在已有程序中对其进行实现。每章内容中还包括对模式优缺点的讨论,探讨它与其他模式的关联、相似和不同之处。

为什么要学习设计模式

了解设计模式能帮助你轻松应对面试和考核:几乎所有关于编程的工作面试和考核中都会有关于模式的问题。了解这些知识能够帮助你发现更广泛的工作机会,或者实现升职加薪的工作目标。

了解设计模式可扩展你的编程工具箱:模式能让你对已有的解决方案进行自定义,而不用完全自行开发。代码中的错误将更少,因为你使用的是经过证明的标准解决方案,它考虑了所有隐藏的问题。

了解设计模式让你能够更好地与同事沟通:你只需将模式的名称告诉给程序员,而不需要长篇累牍地解释自己那绝妙的设计思想以及其中各个类的作用。不费吹灰之力就能搞定同事之间的沟通。

谁适合学习本教程

模式初学者:如果你从未学习过模式,本书会讲解面向对象程序设计的基本原则,并且提供真实示例。在深入学习模式之前,我们会先了解模式背后的基础性设计理念和原则。

希望复习模式知识的读者:如果你以前学习过模式,但是已经忘记了很多内容,本书不仅能帮你重拾记忆,还能是一本便捷的参考手册。你可以快速找到自己感兴趣的章节,无需从头到尾地进行阅读。

开始使用新编程语言的读者:如果你正在着手使用一种新的面向对象的地的编程语言(Java、 C#、 C++、 PHP、 Python、 Ruby、 Swift 或 TypeScript),那么本书中众多的真实世界示例和类比(包含精心制作的图表)将帮助你迅速抓住隐藏在字里行间的关键信息。

模式包含哪些内容?

软件设计模式使人们可以更加简单方便地复用成功的设计和体系结构,它通常包含以下几个基本要素:模式名称、别名、动机、问题、解决方案、效果、结构、模式角色、合作关系、实现方法、适用性、已知应用、例程、模式扩展和相关模式等,其中最关键的元素包括以下 4 个主要部分。

模式名称:每一个模式都有自己的名字,通常用一两个词来描述,可以根据模式的问题、特点、解决方案、功能和效果来命名。模式名称(PatternName)有助于我们理解和记忆该模式,也方便我们来讨论自己的设计。

问题:问题(Problem)描述了该模式的应用环境,即何时使用该模式。它解释了设计问题和问题存在的前因后果,以及必须满足的一系列先决条件。

解决方案:模式问题的解决方案(Solution)包括设计的组成成分、它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象的 组合)来解决这个问题。

效果:描述了模式的应用效果以及使用该模式应该权衡的问题,即模式的优缺点。主要是对时间和空间的衡量,以及该模式对系统的灵活性、扩充性、可移植性的影响,也考虑其实现问题。显式地列出这些效果(Consequence)对理解和评价这些模式有很大的帮助。

模式的历史

谁发明了设计模式?这是一个很好的问题,但也有点不太准确。设计模式并不是晦涩的、复杂的概念——事实恰恰相反。模式是面向对象设计中常见问题的典型解决方案。同样的解决方案在各种项目中得到了反复使用,所以最终有人给它们起了名字,并对其进行了详细描述。这基本上就是模式被发现的历程了。

模式的概念是由克里斯托佛·亚历山大在其著作《建筑模式语言》中首次提出的。本书介绍了城市设计的“语言”,而此类“语言”的基本单元就是模式。模式中可能会包含对窗户应该在多高、一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。

埃里希·伽玛、约翰·弗利赛德斯、拉尔夫·约翰逊和理查德·赫尔姆这四位作者接受了模式的概念。1994 年,他们出版了《设计模式:可复用面向对象软件的基础》一书,将设计模式的概念应用到程序开发领域中。该书提供了

23 个模式来解决面向对象程序设计中的各种问题,很快便成为了畅销书。由于书名太长,人们将其简称为“四人组(Gang of Four,GoF)的书”,并且很快进一步简化为“GoF 的书”。

此后,人们又发现了几十种面向对象的模式。​“模式方法”开始在其他程序开发领域中流行起来。如今,在面向对象设计领域之外,人们也提出了许多其他的模式。

关于模式的争议

设计模式自其诞生之初似乎就饱受争议,所以让我们来看看针对模式的最常见批评吧。

一种针对不完善编程语言的蹩脚解决方案

通常当所选编程语言或技术缺少必要的抽象功能时,人们才需要设计模式。在这种情况下,模式是一种可为语言提供更优功能的蹩脚解决方案。

例如,策略模式在绝大部分现代编程语言中可以简单地使用匿名(lambda)函数来实现。

低效的解决方案

模式试图将已经广泛使用的方式系统化。许多人会将这样的统一化认为是某种教条,他们会“全心全意”地实施这样的模式,而不会根据项目的实际情况对其进行调整。

不当使用如果你只有一把铁锤,那么任何东西看上去都像是钉子。

这个问题常常会给初学模式的人们带来困扰:在学习了某个模式后,他们会在所有地方使用该模式,即便是在较为简单的代码也能胜任的地方也是如此。

设计模式分类

不同设计模式的复杂程度、细节层次以及在整个系统中的应用范围等方面各不相同。我喜欢将其类比于道路的建造:如果你希望让十字路口更加安全,那么可以安装一些交通信号灯,或者修建包含行人地下通道在内的多层互通式立交桥。

最基础的、底层的模式通常被称为惯用技巧。这类模式一般只能在一种编程语言中使用。

最通用的、高层的模式是构架模式。开发者可以在任何编程语言中使用这类模式。与其他模式不同,它们可用于整个应用程序的架构设计。

此外,所有模式可以根据其意图或目的来分类。本书覆盖了三种主要的模式类别:

创建型模式

这类模式提供创建对象的机制, 能够提升已有代码的灵活性和可复用性。

0-0-1.png

结构型模式

这类模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

0-0-2.png

行为模式

这类模式负责对象间的高效沟通和职责委派。

0-0-3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一建机电实务教材电子版_必背!一建《机电实务》高频考点,每日一背

本文部分来自学霸笔记,点击链接关注公众号下载【工业管道的施工程序】1.管道施工前应具备的开工条件:1.工程设计图纸及其他技术文件完整齐全,已按程序进行了工程交底和图纸会审。2.施工组织设计和施工方案已批准,并已进行了技术和…

python 数据去重_科学网—python学习——根据条件提取数据,并去重 - 李立的博文...

[Python字符串提取] 摘要:根据要求进行字符串的提取,并去重 导入分析所需的库import pandas as pd 构造数据集 as1 pd.DataFrame({a:[1,2,3,4], b:[adwdea,asdw;swa,des,swa,dwad;asdw;swa,se;dw,asd;erf,de,de]})编写分析函数 def trans(b): as1[c] b…

assertionerror python_Python成为专业人士笔记–内置模块Modules和函数Functions

“专业人士笔记”系列目录:创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.com模块是一个包含Python定义和语句的文件,而函数是执行逻辑的一段代码 。要检查python中内置的函数&#xff…

【Filament】纹理贴图

1 前言 本文主要介绍使用 Filament 实现纹理贴图,读者如果对 Filament 不太熟悉,请回顾以下内容。 Filament环境搭建绘制三角形绘制矩形绘制圆形绘制立方体 Filament 纹理坐标的 x、y 轴正方向分别朝右和朝上,其 y 轴正方向朝向与 OpenGL ES…

c++可视化界面_新基建的福音:智慧楼宇可视化监控系统引领智能化新时代

前言智慧楼宇和人们的生活息息相关,楼宇智能化程度的提高,会极大程度的改善人们的生活品质,在当前 工业互联网 大背景下受到很大关注。目前 智慧楼宇可视化监控 的主要优点包括:智慧化 -- 智慧楼宇是一个生态系统,像人一样拥有感知…

table 多行 宽度不一致_“table”除了桌子,你还知道一些别的意思吗?

就比如"nine-nine table"这可是小学一年级必须要掌握的知识实际上,nine-nine table是九九乘法表,乘法表可以用times table表示,书面用语是multiplication table。table除了桌子的意思外,还有一些别的意思和表达&#xf…

ddos攻击工具_简单有效的ddos攻击防御方法

做过网站的站长大多有被ddos攻击的经历,不少人面对竞争对手的网站就是直接雇人ddos攻击网站,导致对方网站长期打不开,最后无奈关闭网站,初尧今天就告诉大家一个最简单也是最有效的防御方法。高防服务器/高防IP对于游戏&#xff0c…

回调函数中有回调函数吗_嗨,那里有回调!

回调函数中有回调函数吗因为是我的书包,所以我喜欢JavaScript 。 实际上,我已经开始喜欢JavaScritp的面向异步回调的编程风格 。 因此,当我发现自己处于非JavaScript环境中时(例如Java) ,我往往会错过使用回…

python的django_django能用来做什么

Django是什么 Django是一个开放源代码的Web应用框架,由Python写成。采用了MT‘V的框架模式,即模型M,模板T和视图V。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统&am…

datatable如何生成级联数据_如何把Excel表数据批量生成条形码

条形码属于一维条码,是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符,条形码的种类比较多,比如常用的Code128码,Code39码,Code93码,EAN-13码&am…

android数字累加,Android自己设置View之数字自动增长

第一次写文,请多指教,有何问题及改进建议都可以告诉我-.-Idea来自金山词霸App的单词计数,下面先放图autoNumber.gif如上图,就是,下面开始进入自己设置View自己设置View步骤1. 自己设置属性2. 生成构造方法3. onMeasure…

settimeout怎么用_怎么实现一个3d翻书效果

本篇主要讨论以下两种翻书动画的实现:第一种是整页翻转的效果:这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性实现。第二种折线翻转的效果,如下图所示:主要是通过计算页面翻折过来的位置。这两种原理…

5个令人震惊的统计数据证明日志不足

事实证明,我们都犯有记录不当行为的罪行。 不相信我们吗? 这些统计数据可能会改变您的想法 当人们提出带有明显答案的问题时,这非常令人不快,因此,我不会坐在这里问您和您的团队是否使用日志文件来监视预生产和生产环…

linearregression_机器学习-TensorFlow建模过程 Linear Regression线性拟合应用

TensorFlow是咱们机器学习领域非常常用的一个组件,它在数据处理,模型建立,模型验证等等关于机器学习方面的领域都有很好的表现,前面的一节我已经简单介绍了一下TensorFlow里面基础的数据结构即:Tensor和Dataset&#x…

html页面调用存储过程,用WebBrowser实现HTML界面的应用

HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash、声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护。另外,HTML的显示环境一般机器上都具备,通常不需要安装额外的软件。当然&…

凡事多找找自己的原因_布袋除尘器灰斗积粉过多、堵灰该咋办?别急,从这8个方面找原因...

灰斗布置在袋室的下部,它除了存放收集下来的粉尘以外,还作为下进气总管使用,当含尘气体进入袋室前先进入灰斗,由于灰斗内容积较大,使得气流速度降低,加之气流方向的改变,使得较粗的尘粒在这里得…

python怎么改变字体大小_Python-docx 整体修改或者部分修改文字的大小和字体类型...

Python中可以用docx来生成word文档,docx中可以自定义文字的大小和字体等。 其中要整体修改文字的字体大小和字体,可以用以下方法: newfile docx.Document() newfile.styles[Normal].font.name Times New Roman newfile.styles[Normal]._ele…

cad设计院常用字体_如何把CAD图纸坐标转换成现场坐标?

使用CAD软件画建筑施工图是很常见的,特别是在施工现场,为了不受现场场地落差的影响,需要使用全站仪,但是使用全站仪需要把CAD图纸转换成CAD坐标,很多人可能并不知道该怎么转换,下面我们就来介绍一下如何把图…

sqlserver select 数值精度_SQL Server读懂语句运行 (二) SET STATISTICS IO ON

对于语句的运行,除了执行计划本身,还有一些其他因素要考虑,例如语句的编译时间、执行时间、做了多少次磁盘读等。这些信息对分析问题很有价值。1 SET STATISTICS TIME ON 2 SET STATISTICS IO ON 3 SET STATISTICS PROFILE ON今天&#xff0c…

.net webservice studio调用方法传参_springboot整合WebService简单版

一.什么是webservice这里给大家分享一下我们的专栏《Java 进阶集中营》,每天都会给大家分享一个最新的java技术内容,有优秀的技术讯息,也欢迎分享在我的专栏里。JAVA 进阶集中营​zhuanlan.zhihu.com二.springboot整合webservice 整合webserv…