1.1 模式简介
如前所述,程序员通过设计模型来开始编写程序:编译程序将对其进行操作的实体列表。并且程序中的实体越多,程序就越复杂。
因此,为了降低程序的复杂度,他们试图将对象的交互标准化。而这正是设计模式或设计模式对程序员有很大帮助的地方。源自英文design pattern。
重要的!在俄语中,设计一词通常表示图形设计,而在英语中并非如此。英文单词design在含义上更接近于单词“design”和/或“device”。例如,发动机的设计不是它的外观,而是它的内部结构。
因此,设计模式就是设计模式/模式。我建议你完全停止在“外观”的意义上使用设计这个词。你是未来的软件工程师,对你来说设计就是设计。
那么这个设计模式是什么呢?首先,设计模式是标准问题的标准解决方案。一个好的、有效的和经过时间考验的解决方案。
比方说你被要求设计一辆自行车,你可以把它做成两个轮子,三个甚至五个。所以顺便说一句,在设计的初期,它是。但经过时间考验的方法是两个轮子。但目前显而易见的方法经历了痛苦和错误:
通常,模板不是可以直接转换为代码的完整解决方案,它只是一个很好的解决问题的示例,可以在各种情况下使用。
面向对象模式显示类或对象之间的关系和交互,而不指定将使用哪些最终类或应用程序对象。
1.2 设计模式的历史
早在 70 年代,程序员就需要开发大型程序,而这些程序必须由整个开发团队共同完成。尝试了各种组织工作的方法,但建筑业对发展的影响最大。
为了组织一大群人的工作,使用了建筑行业的实践和方法。顺便说一句,程序集(build)、Software Developer(builder)和架构的概念就是从那里开始进入编程的。
正如您可能猜到的那样,设计模式的想法也来自建筑行业。模式的概念首先由 Christopher Alexander 在模式语言中描述。城市。建筑。建造”。在这本书中,一种特殊的语言,模式,被用来描述城市设计的过程。
建筑模式描述了典型的经过时间考验的决定:窗户应该有多高,建筑物应该有多少层,微区应该为树木和草坪分配多少面积。
因此,1994 年出版《面向对象设计技术》一书也就不足为奇了。Design Patterns”,其中包括 23 种解决面向对象设计各种问题的模式。
这本书由 4 位作者撰写:Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。书名太长,谁都记不住。因此,很快大家就开始称它为“book by the gang of the four”,即“四人帮的书”,后来甚至被称为“GoF book”。
从那时起,其他设计模式就被发现了。“模式”方法在编程的所有领域都变得流行,所以现在您可以在对象设计之外找到各种模式。
重要的!模式不是一些超级原创的解决方案,相反,它是经常遇到的、针对同一问题的典型解决方案。经过验证的良好解决方案。
1.3 模式列表
许多程序员一生都没有学习过一种模式,但这并不妨碍他们使用它们。正如我们之前所说,模式是经过时间考验的好解决方案,如果程序员不是傻瓜,那么他自己会根据经验找到这样的解决方案。
但是,既然有人已经走过这条路,并把他们的经验和人生智慧写成书,为什么还要经过几十次试错,得出最优解呢?
你可以用扳手敲钉子,但为什么呢?如果你努力的话,你甚至可以使用钻头。但是,有意识地拥有乐器正是专业人士与业余爱好者的区别所在。而专业人士都知道,钻头的主要特点根本不在这。那么,为什么你需要了解模式?
- 经过验证的解决方案。您花更少的时间使用现成的解决方案,而不是重新发明轮子。有些决定是您自己想到的,但许多决定对您来说可能是一个发现。
- 代码标准化。使用典型的统一解决方案进行设计时,您的计算错误会更少,因为其中隐藏的问题早就被发现了。
- 通用编程词典。您说出模式的名称,而不是花一个小时向其他程序员解释您提出了多么酷的设计以及为此需要哪些类。
图案是什么?
模式在所设计系统的复杂程度、细节和覆盖范围方面有所不同。打个建筑类比,你可以通过设置红绿灯来增加十字路口的安全性,或者你可以用带地下通道的整车立交来代替十字路口。
最低级和最简单的模式是习语。它们不是通用的,因为它们仅适用于一种编程语言的框架。
最通用的是几乎可以用任何语言实现的架构模式。他们需要设计整个程序,而不是它的单个元素。
但最主要的是模式的目的不同。我们将熟悉的模式可以分为三个主要组:
- 创建模式负责灵活地创建对象,而不会在程序中引入不必要的依赖关系。
- 结构模式显示了在对象之间建立关系的不同方式。
- 行为模式负责对象之间的有效通信。
1.4 UML简介
让我们先看看《四人帮》一书中描述的相同的 23 种模式。即使对于新手程序员来说,模式本身和它们的名称都是熟悉的东西。我会向您介绍它们,但我强烈建议您阅读那本关于模式的书。
设计模式不依赖于特定的编程语言,因此通常使用 UML 来描述它们。它在 20 年前非常流行,但即使现在有时也会使用。顺便说一下,模式的描述只是使用 UML 的标准。
使用 UML,您可以描述不同实体之间的关系。在我们的例子中,这些是对象和类。
类之间的关系由四种类型的箭头描述:
组合(组合) - 聚合的一个亚种,其中“部分”不能与“整体”分开存在。 | |
聚合- 描述“部分”-“整体”的关系,其中“部分”可以独立于“整体”存在。菱形是从“整体”一侧表示的。 | |
依赖- 一个实体(独立)的变化会影响另一个实体(依赖)的状态或行为。箭头的一侧指示了一个独立的实体。 | |
泛化——接口的继承或实现的关系。箭头的一侧是超类或接口。 |
其实这里的一切都很简单。最后一个箭头实际上表示一个类继承自另一个类。而第一个和第二个箭头是一个对象存储到第二个对象的链接。这就是全部。
如果链接菱形是黑色的,则链接很弱:对象可以独立存在。如果菱形是白色的,那么对象是强相关的,比如一个类HttpRequest
和它的子类HttpRequest.Builder
。
1.5 模式列表
图案类型将由不同的颜色和字母表示:
乙- 行为的(behavioral);
C- 生成(创造);
小号- 结构(结构)。
最后,列出 23 种设计模式:
C- 抽象工厂 小号- 适配器 小号- 桥 C- 生成器 乙- 责任链 乙- 团队 小号- 链接器 小号- 装饰师 |
小号– 立面 C- 工厂方法 小号- 机会主义者 乙- 口译员 乙- 迭代器 乙- 中介 乙- 守护者 C- 原型 |
小号- 代理人 乙— 观察者 C— 孤独者 乙- 状态 乙- 战略 乙— 模板方法 乙— 访客 |
GO TO FULL VERSION