转载请保留出处,尊重他人劳动。

引子:

模式的定义,似乎都如出一辙但又似乎都略有不同,这些由于关注点的不同导致的不同点让事情变得有点复杂了。

简史:

何谓设计模式?任何一本讲解软件设计模式的书籍都会首先问出这个问题。而大部分又都会给出一个(或若干个)传说中软件设计模式起源的定义:

       “每个模式就是一条由三部分组成的规则,它表示了一个特定环境、一个问题和一个解决方案之间的关系。

      

简单地说,模式是一个出现在世界上的实物,同时也是一条规则,告诉你应该如何创建一个实物、应该在何时创建。它既是过程,也是实物;既是对当前实物的描述,也是对创建实物的过程的描述。”            ——《建筑的永恒之道》

“对于反复出现设计问题的抽象解决方案”           ——《建筑模式语言》

之后,这些概念在不同的软件设计模式的书籍中不断被本地化:

Gof(Gang of four)的《Design Pattern》中模式被定义成三段值: 模式就是表示特定情境、问题、与方案之间的关系。

在《J2EE core Patterns》一书种的定义:模式是用来描述所交流的问题及其解决方案。

《面向模式的软件体系结构》的结论:一个软件体系结构的模式描述了一个出现特定设计语境中的特殊的再现设计问题,并为她的解决方案提供了一个经过充分验证的通用图式。解决方案图式通过描述其组成组件、他们的责任和相互关系以及它们的协作方式来具体指定。

当然在一些其他书籍中也有相关论述:模式就是“范例”;就是同时考虑一对问题,求解方案的“专家行为”等等……

 

观点:

这些观点和概念,似乎都如出一辙但又似乎都略有不同,这些由于关注点的不同导致的不同点让事情变得有点复杂了。我在浏览这些书籍的时候,一直在想是不是应该自己归纳一下自己的理解呢?OK,让我自己动手做做看。

定义:
    pattern_one.JPG

广义上讲:模式就是一个环境中,一个反复出现的典型问题与这个问题的以经过论证的解决方案,以及它们三者紧密关系的整体的抽象描述。

为了便于记忆,用序列可以表示为:

环境:出现问题以及其解决方案的场景。

问题:环境中可以被一个解决方案覆盖的一个反复出现的典型问题。

解决方案:已经被证实可以在语境中解决一个典型问题的策略与方法。

关系:以上已经提到的三点的紧密地关联性。

模式:以上四点的整体的抽象描述。

 

这样软件设计模式应该就已经一目了然了:

软件设计模式就是指:在软件领域这个大环境下的解决软件设计问题的模式(广义模式)。

为了便于记忆,用序列可以表示为:

环境具化:软件设计领域

问题具化:软件设计的问题

软件设计模式:有以上两点具化的模式(广义模式)。

 

Haha 现在这样的定义描述就比较清晰了。

 

特点:

在前面的定义中已经能够看到许多模式的特性了,比如:整体的抽象性,问题的反复性,解决方案的以论证性,关系的紧密性等等。其实,模式还有若干隐含的特性。

归纳性:模式其实是对经过充分考验的经验,是提炼过后的一种可复用的知识。它与经验论、循证主义、同属于人类最基本的认知手段归纳法的产物。

动、静性:模式本身既描述一个抽象后的物件,也描述一个抽象过程。

       与定义一样软件设计模式同样继承了这些特性。