做网站公司赚钱吗?,蚌埠市建设局网站,wordpress ms,gta5资产网站正在建设设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图#xff0c;可用于解决代码中反复出现的设计问题。
设计模式与方法或库的使用方式不同#xff0c;你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码#xff0c;而是解…设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图可用于解决代码中反复出现的设计问题。
设计模式与方法或库的使用方式不同你很难直接在自己的程序中套用某个设计模式。模式并不是一段特定的代码而是解决特定问题的一般性概念。你可以根据模式来实现符合自己程序实际所需的解决方案。
人们常常会混淆模式和算法因为两者在概念上都是已知特定问题的典型解决方案。但算法总是明确定义达成特定目标所需的一系列步骤而模式则是对解决方案的更高层次描述。同一模式在两个不同程序中的实现代码可能会不一样。
算法更像是菜谱提供达成目标的明确步骤。而模式更像是蓝图你可以看到最终的结果和模式的功能但需要自己确定实现步骤。
本教程特点
中文、免费、零起点、完整示例、基于最新的 Python 3 语法。图文并茂的解说丰富的案例真实代码实现。业界最详细最清晰最权威的设计模式教程。
本教程对 22 个经典设计模式以及这些模式背后的 7 个面向对象设计原则进行了说明。每章都会以一个真实世界的软件设计问题开篇然后使用其中一个模式来解决这个问题。接着我们会详细分析该模式的结构及其变体然后给出相应的示例代码。然后会展示该模式的不同应用讲解如何分步骤地实现该模式有时甚至会在已有程序中对其进行实现。每章内容中还包括对模式优缺点的讨论探讨它与其他模式的关联、相似和不同之处。
为什么要学习设计模式
了解设计模式能帮助你轻松应对面试和考核几乎所有关于编程的工作面试和考核中都会有关于模式的问题。了解这些知识能够帮助你发现更广泛的工作机会或者实现升职加薪的工作目标。
了解设计模式可扩展你的编程工具箱模式能让你对已有的解决方案进行自定义而不用完全自行开发。代码中的错误将更少因为你使用的是经过证明的标准解决方案它考虑了所有隐藏的问题。
了解设计模式让你能够更好地与同事沟通你只需将模式的名称告诉给程序员而不需要长篇累牍地解释自己那绝妙的设计思想以及其中各个类的作用。不费吹灰之力就能搞定同事之间的沟通。
谁适合学习本教程
模式初学者如果你从未学习过模式本书会讲解面向对象程序设计的基本原则并且提供真实示例。在深入学习模式之前我们会先了解模式背后的基础性设计理念和原则。
希望复习模式知识的读者如果你以前学习过模式但是已经忘记了很多内容本书不仅能帮你重拾记忆还能是一本便捷的参考手册。你可以快速找到自己感兴趣的章节无需从头到尾地进行阅读。
开始使用新编程语言的读者如果你正在着手使用一种新的面向对象的地的编程语言Java、 C#、 C、 PHP、 Python、 Ruby、 Swift 或 TypeScript那么本书中众多的真实世界示例和类比包含精心制作的图表将帮助你迅速抓住隐藏在字里行间的关键信息。
模式包含哪些内容
软件设计模式使人们可以更加简单方便地复用成功的设计和体系结构它通常包含以下几个基本要素模式名称、别名、动机、问题、解决方案、效果、结构、模式角色、合作关系、实现方法、适用性、已知应用、例程、模式扩展和相关模式等其中最关键的元素包括以下 4 个主要部分。
模式名称每一个模式都有自己的名字通常用一两个词来描述可以根据模式的问题、特点、解决方案、功能和效果来命名。模式名称PatternName有助于我们理解和记忆该模式也方便我们来讨论自己的设计。
问题问题Problem描述了该模式的应用环境即何时使用该模式。它解释了设计问题和问题存在的前因后果以及必须满足的一系列先决条件。
解决方案模式问题的解决方案Solution包括设计的组成成分、它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板可应用于多种不同场合所以解决方案并不描述一个特定而具体的设计或实现而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合类或对象的 组合来解决这个问题。
效果描述了模式的应用效果以及使用该模式应该权衡的问题即模式的优缺点。主要是对时间和空间的衡量以及该模式对系统的灵活性、扩充性、可移植性的影响也考虑其实现问题。显式地列出这些效果Consequence对理解和评价这些模式有很大的帮助。
模式的历史
谁发明了设计模式这是一个很好的问题但也有点不太准确。设计模式并不是晦涩的、复杂的概念——事实恰恰相反。模式是面向对象设计中常见问题的典型解决方案。同样的解决方案在各种项目中得到了反复使用所以最终有人给它们起了名字并对其进行了详细描述。这基本上就是模式被发现的历程了。
模式的概念是由克里斯托佛·亚历山大在其著作《建筑模式语言》中首次提出的。本书介绍了城市设计的“语言”而此类“语言”的基本单元就是模式。模式中可能会包含对窗户应该在多高、一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。
埃里希·伽玛、约翰·弗利赛德斯、拉尔夫·约翰逊和理查德·赫尔姆这四位作者接受了模式的概念。1994 年他们出版了《设计模式可复用面向对象软件的基础》一书将设计模式的概念应用到程序开发领域中。该书提供了
23 个模式来解决面向对象程序设计中的各种问题很快便成为了畅销书。由于书名太长人们将其简称为“四人组Gang of FourGoF的书”并且很快进一步简化为“GoF 的书”。
此后人们又发现了几十种面向对象的模式。“模式方法”开始在其他程序开发领域中流行起来。如今在面向对象设计领域之外人们也提出了许多其他的模式。
关于模式的争议
设计模式自其诞生之初似乎就饱受争议所以让我们来看看针对模式的最常见批评吧。
一种针对不完善编程语言的蹩脚解决方案
通常当所选编程语言或技术缺少必要的抽象功能时人们才需要设计模式。在这种情况下模式是一种可为语言提供更优功能的蹩脚解决方案。
例如策略模式在绝大部分现代编程语言中可以简单地使用匿名lambda函数来实现。
低效的解决方案
模式试图将已经广泛使用的方式系统化。许多人会将这样的统一化认为是某种教条他们会“全心全意”地实施这样的模式而不会根据项目的实际情况对其进行调整。
不当使用如果你只有一把铁锤那么任何东西看上去都像是钉子。
这个问题常常会给初学模式的人们带来困扰在学习了某个模式后他们会在所有地方使用该模式即便是在较为简单的代码也能胜任的地方也是如此。
设计模式分类
不同设计模式的复杂程度、细节层次以及在整个系统中的应用范围等方面各不相同。我喜欢将其类比于道路的建造如果你希望让十字路口更加安全那么可以安装一些交通信号灯或者修建包含行人地下通道在内的多层互通式立交桥。
最基础的、底层的模式通常被称为惯用技巧。这类模式一般只能在一种编程语言中使用。
最通用的、高层的模式是构架模式。开发者可以在任何编程语言中使用这类模式。与其他模式不同它们可用于整个应用程序的架构设计。
此外所有模式可以根据其意图或目的来分类。本书覆盖了三种主要的模式类别
创建型模式
这类模式提供创建对象的机制 能够提升已有代码的灵活性和可复用性。结构型模式
这类模式介绍如何将对象和类组装成较大的结构 并同时保持结构的灵活和高效。行为模式
这类模式负责对象间的高效沟通和职责委派。