第一章 引言 第一节 论模式
“简单地说,模式是一个出现在世界上的实物,同时也是一条规则,告诉你应该如何创建一个实物、应该在何时创建。它既是过程,也是实物;既是对当前实物的描述,也是对创建实物的过程的描述。”
——《建筑的永恒之道》
在软件科学中,随着理论的发展,模式被细分为好多种,有软件的管理模式,实践证明与传统管理是有区别的,从而是一种新的模式。有软件分析模式,有软件设计模式,过程模式,有软件重构模式等等。其中设计模式是最核心、最重要的模式。在通常的理论书籍中,一般把设计模式就简称为模式了。下文中可以通过上下文环境知道模式做设计模式解或是通用的模式。
那么,在软件科学中,模式到底是什么呢,能完全借用C.Alexander定义的模式吗?有人说软件跟建筑天生相像,你瞧 Architecture,身兼数重意思。其实GOF书中已经有说明:本质上一样。但是具体到软件领域又有所不同。可惜的是由于软件模式理论一直在发展中,公认的定义到目前为止还没有。但是确有几种经典的说法。有说,模式就是情境中一个问题经过证实地一个方案.这种定义比较简单,简洁明了。在Gof(Gang of four)的书中模式被定义成三段值:表示特定情境、问题、与方案之间的关系。并按照这样的方式描述介绍了著名的23种模式(c++语言描述)。在《J2EE core Patterns》一书种作者也作了类似的定义:模式是用来描述所交流的问题及其解决方案。并用类似于GOF书中的介绍步骤解析了15个J2EE模式。其他介绍模式的书籍、论文与网站也有自己的模式定义。但都推崇GOF书中的定义,并一般以其为蓝本对比介绍。
第二节 穷追模式的本原软件中的模式起源于建筑,但是正如Gang of Four在《设计模式》中所说:尽管Alexander所指的是城市和建筑模式,但他的思想也同样适用于面向对象设计模式。只是在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两者的核心都在于提供了相关问题的解决方案。
实际上我们生活在一个充满模式的世界里——当然,简单的而肯定的前提是我们的世界是有秩序的。现代的人除了疯子和变态,几乎都穿有衣服;大部分人都是一天吃三顿饭,当然也有一天吃两顿的;社会中,我们属于某个社区或团体,参与政治、经济活动;在我们参与的所有活动中,我们都按照一定的规则行事;在规则边缘的人们又总是希望加入规则使用者的行列,就像我们中国先前和俄罗斯现在一直坚持要求加入世界贸易组织一样。吃饭、穿衣、睡觉是我们人类基本的生活要求;我们每一个人都必须遵守,一个人如果不穿衣、不吃饭,那没有其他结论,他根本就不属于人类。参与社区,在一定的框架下进行社会经济活动则是人类得以日益发展的内在要求。
其实在中国传统里头更是讲究模式,比如京剧,一招一式都有套路;再如中国国画格式讲究套路,树该怎么画,有几种画法;又如《孙子兵法》——它可以说已经成为用在各方面“战争”的通用模式了,他告诉你在什么军事环境中采取什么阵法,然而怎么去拼打就靠自己的理解和灵活应用了。因而,创建模式的是大师级别的人物,拘泥于这些模式的人却只能叫做工匠。当然对于无所谓模式者,要么已经融会贯通,要么就是无知,他们应该首先成为的是工匠。就像我们中国,现阶段,就是在积极参与国际社会与经济活动规则的制定,用中华民族的传统美德和智慧重塑具有中华民族特色的国际、国内社会经济交往方式,再造有利于全体人类可持续发展的社会经济活动规则。
可见模式是无所不在的,生活中模式是习惯的养成。文化中模式是历史的积淀。学习中模式是经验的升华。软件科学中模式就是人们对实践的提炼、是实用性与理论性的统一。
第三节 学习和研究设计模式 1、为什么学习和研究设计模式那么我们在软件中为什么要学习模式?模式到底给我们带来了什么好处而使得如此多人对它热衷?其实道理是一样的——我们都需要借鉴大师的经验,站在巨人的肩膀上才能够更好的前行。尤其在工科领域,这点显的更是重要。其次,学习模式能让我们学习和开发软件时少走弯路,使得我们的学习从一开始就是严密的。开发出来的软件也能更加scalable和reusable,从而可以提供更强的可维护性、更短的开发生命周期。知道模式,研究模式还可以让我们开发软件更流畅、更模块化,减少耦合。用一个术语说就是减少内应力,合理疏解软件的内应力可以使得软件系统长存。如建筑结构中分解压力一般,如果结构不合理,压力分解不均,建筑很可能很快就或漏或塌。要使得新建筑、新软件在一定时期内不漏不塌是我们要学习模式的基本原因;能够使得我们的建筑、软件长久甚至永存,正是模式如此吸引我们的魅力所在。
2、如何学习和研究设计模式同样有必要从建筑中模式发展历程讲起,我们来看看Christopher Alexander教授“三步曲” :
•研究模式的理论——《建筑的永恒之道》
•第一个完整的模式语言——《建筑模式语言》
•理性地用模式来指导建筑过程——《俄勒冈实验》
本文是有关设计模式的研究。设计模式第一次是由架构设计师 Christopher Alexander 在他所著的 A Pattern Language: Towns, Buildings, Construction(Oxford University Press,1977)一书中提到的。他引入了这一概念,并称为模式 — 对于反复出现设计问题的抽象解决方案―― 这一概念吸引了其它领域中一些研究人员的注意,特别是二十世纪八十年代中后期,那些开发面向对象的软件人员。值得注意的是对软件设计模式的研究造就了一本据信是面向对象设计方面最有影响的书籍:Design Patterns: Elements of Reusable Object-Oriented Software(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著。这几位作者常被称为“四人组(Gang of Four)”,很多人也戏称是“四人帮”,而这本书也就被称为“四人组/帮(或 GoF)”书。
在此经典模式理论指导下,就可以管窥设计模式的精要了。通常的步骤应该是:首先要了解设计模式,大凡接近她的人都会被她的魅力感召。这样就过渡到再次:系统学习设计模式,在学习的同时和学习以后我们要作的就是在项目中去实践设计模式了。必须指出的是最终实践设计模式时候要落实到具体的环境中,使用某种语言,受限于特定环境的应用需要勇气和变通,纸上谈兵是无助于实际的。本文是在J2EE环境中模式的分析与实践。
本文地址:http://com.8s8s.com/it/it17425.htm