首页 > 代码库 > 0.1 何谓设计模式

0.1 何谓设计模式

[GoF·第6章结论]中,介绍了设计模式的诞生与发展的历史:『建筑师Christopher Alexander第一个研究了建筑物和社区的模式,并开发了一个“模式语言”来生成它们。他的工作一次次地启发了我们』

对于不熟悉建筑行业、也不熟悉“模式语言”的大多数程序员,模式/pattern,显得比较高大上。其实,我个人更喜欢的说法是:技法!例如中国象棋中残局的解决方案或杀法。

中国象棋的隐喻

例如这样一个盘局:


问题:在当前的局面下,红方如何战胜黑方。

会下中国象棋的人肯定能够找出办法:炮放在将的后面打黑车,就能够锁定胜局。这一常用的残局杀法,有一个名字叫“海底捞月”。

技法或模式(pattern)是特定环境/条件下的某一个问题的一种解决方案

特定环境:海底捞月的前提条件是红车占领中路。设计模式中,特定环境作为问题的一部分。

1.名字:“海底捞月”代表了一个中国象棋盘局(问题)、这一盘局下的解决方案、各种变化和解决方案的效果。不管是棋手还是程序员,模式的名字,对于他们讨论问题很有帮助,这些名称是他们专业素养和专业词汇的一部分。文档是软件开发的重要组成部分,例如,一个框架如Spring的文档是学会使用该框架的程序员的重要资料。在文档中使用模式名,可以使懂得设计模式的人更快地了解系统。

在学习Java I/O流时,如果你懂得装饰模式和适配器模式,将会很轻松愉快。

2.问题描述

大体上,[GoF]“记录”或者说归纳了23种设计模式。因而,它写道:『问题(problem),描述了应该在何时使用模式……有时候,问题部分会包括使用模式必须满足的一系列先决条件』。在[GoF·1.3描述设计模式]中说明:该书按照特定的模板描述每一个模式,该模板包括:模式名和分类、意图、动机、适用性、结构、参与者、协作、效果、实现、代码示例、已知应用和相关模式。所以,问题描述体现为“意图”和“动机”。这是归纳之后的总结。

假定我们的基本学习方法是推演,换言之,希望从问题出发,找出相应的技法或模式,那么,我们的问题描述 可能是从一个点出发,而得到的模式还可以应用到更多的方面。海底捞月的原理你知道了,当然红方的车兵如何战胜黑方的单车,也就不在话下。

3. 解决方案

海底捞月的解决方案是棋谱——你不懂棋谱,自己会下也可以。

设计模式是设计中的解题模板,通常呈现为类图或者说结构。为了使读者更容易理解,书中或文章中常常添加类图,我们简单地采用BlueJ源代码所形成的简单类图。源代码将放在在designPattern文件夹中供读者下载。

4.评估

象棋杀法的评价直截了当,成功或失败。设计模式的评估包含较多因素。基本的评估是该模式是否解决了特定的问题,使得设计更符合设计原则、软件更有弹性、可维护性。而『软件效果大多关注对时间和空间的衡量』,这种评估更多针对算法。

技法或模式(pattern)是特定环境/条件下的某一个问题的一种解决方案

?设计模式是有名字的、特定环境/条件下的某一个设计问题的解决方案。包含4个要素(虽然我们对4个要素都或多或少的有些修改).



0.1 何谓设计模式