成功应用程序的模式(2)

1.1  设计模式释义

设计模式是高层次的、抽象的解决方案模板。可以将这些模式视为解决方案的蓝本而不是解决方案本身。从中无法找到一种可以简单地运用到应用程序中的框架;相反,通常是通过重构自己的代码并将问题泛化来实现设计模式。

设计模式不仅适用于软件开发领域,从工程到建筑的所有领域都能够找到它的身影。实际上,模式的思想是由著名建筑大师Christopher Alexander在20世纪70年代引入的,目的是为设计讨论构建一张公共的词汇表。他写道:

本语言的元素是被称为模式的实体。每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心,这样就可以一次又一次地使用该方案而不必做重复劳动。

Alexander的观点不仅适用于建筑和城市规划,也适用于软件设计。

1.1.1  起源

当今软件体系结构中比较流行的设计模式起源于程序员多年使用面向对象编程语言而积累的经验和知识。Design Patterns: Elements of Reusable Object-Oriented Software(又被亲切地称为Design Patterns Bible,即“设计模式圣经”)一书收录了绝大多数最常见的模式。这本书是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四人合著而成,而他们常被称为“四人组”(GoF)。

他们收录了23种设计模式并将它们归纳为3组。

●  创建型模式:处理对象构造和引用。

●  结构型模式:处理对象之间的关系以及它们之间如何进行交互以形成更大的复杂对象。

●  行为型模式:处理对象之间的通信,特别是在责任和算法方面。

所有模式均采用模板表达,这样读者就可以学习如何解读模式并加以运用。我们将在第2章中讲解使用设计模式模板所需的实用知识,并简要介绍将要在本书剩余部分学到的所有模式。

1.1.2  必要性

模式对于软件设计和开发而言至关重要。不管是在设计阶段解决问题,还是在源代码中,模式都支持通过共享的词汇表来表达思想。模式提倡使用优秀的面向对象软件设计,这是因为它们是围绕可靠的面向对象设计原则而构建的。

模式是描述复杂问题的解决方案的有效方式。如果具备设计模式的牢固知识,就可以与团队中的其他成员快速、顺畅地沟通,而不必纠结于底层的实现细节。

模式是语言不可知的,因此,可以将它们转换成其他面向对象语言。通过学习模式而获得的知识将能够运用于具体编程时采用的任何优秀的面向对象语言。

1.1.3  有效性

设计模式的使用价值和终极价值在于,它们是可靠的、经过验证的解决方案,它们的有效性毋庸置疑。如果是一名经验丰富的开发者并且已经采用.NET或其他面向对象编程语言从事编程工作多年,或许发现自己已经在使用“GoF”书中提及的一些设计模式。但如果能够辨别正在使用的模式,那么与其他同样理解模式的开发者的沟通效率就会高得多,他们会理解您的解决方案的结构。

设计模式的宗旨就是重用解决方案。当然,并非所有问题都是一模一样的,但如果能够将一个问题分解,并找出它与以前解决过的问题之间的相似之处,就可以运用这些解决方案。经过数十年的面向对象编程实践,所遇到的大多数问题在之前已经被解决过无数次,而且会有一种模式可用于帮助您实现解决方案。即使您认为自己遇到的问题是独特的,也应该可以通过将其分解成若干基本要素,将其泛化至一定程度,从而找出一种合适的解决方案。

设计模式的名称非常有用,这是因为它反映出该模式的行为和目的,并为人们在集思广益讨论解决方案时提供常用的词汇表。使用模式名称讨论,要比详细地讨论其具体实现如何工作更加容易。

读书导航