软件模式综述

1. 引言
模式(Pattern)的概念最早由建筑大师Christopher Alexander于二十世纪七十年代提出,应用于建筑领域,八十年代中期由Ward Cunningham 和Kent Beck将其思想引入到软件领域,1994年开始由Hillside Group(由Kent Beck等发起成立)和OOPSLA联合发起了国际PLoP(Pattern Language of Programming)会议,如今模式(Pattern)已成为软件工程领域内的一个热门话题,其在计算机领域的影响超过了在建筑界的影响。
Christopher Alexander将模式分为三个部分:首先是周境(Context),指模式在何种状况下发生作用;其二是动机(System of Forces),意指问题或预期的目标;其三是解决方案(Solution),指平衡各动机或解决所阐述问题的一个构造或配置(Configuration)。他提出,模式是表示周境、动机、解决方案三个方面关系的一个规则,每个模式描述了一个在某种周境下不断重复发生的问题,以及该问题解决方案的核心所在,模式即是一个事物(thing)又是一个过程(process),不仅描述该事物本身,而且提出了通过怎样的过程来产生该事物。这一定义已被软件界广为接受。
软件模式的应用对软件开发产生了重大的作用,主要表现在:
(1) 软件模式是人们在长期的设计软件、管理组织软件开发等实践中大量经验的提炼和抽象,是复用软件设计方法、过程管理经验的有力工具。模式类似于拳击中的组合拳,它提供了一系列软件开发中的思维套路。如,通过模式的使用,有利于在复杂的系统中产生简洁、精巧的设计。
(2) 软件模式为我们提供了一套简洁通用的设计、管理、组织方面的词汇,同时模式也为我们提供了一个描述抽象事物的规范标准,可大大促进软件开发过程中人与人之间的交流,而软件开发中的交流是至关重要的,“软件项目失败的原因最终都可追溯到信息没有及时准确地传递到应该接收它的人”。

2. 软件模式的描述、分类与特点
2.1软件模式的描述
从前面可以看出,模式是一个高度抽象的概念。模式的描述分以下几个部分:
(1) 模式名及分类。
模式名称简洁地描述了模式的本质,一个好的名字非常重要。模式的分类将在2.2节中介绍。
(2) 问题(Problem)或意图
在特定的周境和动机下要达到的目标。通常情况下这些动机和目标是相互矛盾相互影响的。
(3) 周境
问题及其解决方案产生时的前提条件。周境告诉我们该模式的适用性,可以将周境视为应用该模式之前的系统初始配置。
(4) 动机
描述相关的动机和约束,它们之间或与期望的达到的目标之间的相互作用(或冲突),通常需要对各期望的目标进行优先级排序。动机阐明了问题的复杂性,定义了在相互冲突时所采取的各种权衡手段。一个好的模式应尽可能将所有产生影响的动机考虑在内。
(5) 解决方案
是一些静态的关系和动态的规则,用以描述如何得到所需的结果。通常是给出一组指令来说明如何构造所需的工作制品。该说明可包括图表、文字,用以标示模式的结构、参与者及其之间的协作,从而表明问题是如何解决的。
(6) 示例
一个或多个该模式的应用例子。示例说明了模式在怎样的初始周境下,如何发生作用,如何改变周境而导致结果周境的出现。示例帮助读者理解模式的具体使用方法。
(7) 结果周境(Resulting Context)
指在应用该模式后系统的状态或配置,包括模式发生作用后带来的后果,以及在新的周境下产生的问题、可应用的模式等。它阐述了模式的后续状态和副作用。通常通过对结果周境的描述,使该模式与其它模式联系起来(该模式的结果周境成为其它模式的初始周境)。
(8) 基本原理(Rational)
对该模式中的解决步骤或采用的规则的解释、证明,解释该模式如何、为何能解决当前问题,它采用的方法为何能得到与期望相一致的结果。
(9) 相关模式
该模式与其它模式的关系,包括静态的或动态的。如,该模式的前导模式(前导模式应用后产生的结果周境与该模式的初始周境一致),后续模式(该模式应用后产生的结果周境与后续模式的初始周境一致),替代模式(使用该模式的替代模式产生同样的效果)等。
(10) 已知应用
阐述该模式在已有应用系统中的实际应用情况,有助于验证该模式的有效性。

2.2软件模式的分类
软件模式主要可分为:设计模式、分析模式、组织和过程模式等,每一类又可细分为若干个子类。在此着重介绍设计模式,目前它的使用最为广泛。
2.2.1设计模式
设计模式主要用于得到简洁灵活的系统设计,Erich Gamma等人将设计模式按其解决问题的不同分为三种:创建型、结构型和行为型三种。通常情况下,设计模式均基于面向对象技术而提出,也可应用于接口定义良好的结构化方法中。
创建型模式。该类型模式是对对象实例化过程的抽象,它通过采用抽象类所定义的接口,封装了系统中对象如何创建、组合等信息。
结构型模式。该类模式主要用于如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理、(多)继承等概念将一个或多个类或对象进行组合、封装,以提供统一的外部视图或新的功能。
行为模式。该类模式主要用于对象之间职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任一对象都无法单独完成的任务。
2.2.2组织和过程模式
在软件项目实施过程中,人们就如何有效地进行项目计划、风险和成本控制、人员组织协调、进度跟踪和激励、质量控制等积累了丰富的经验,组织和过程模式就是这些经验的凝结。如冲刺(Sprint)模式,解决在开发人员尽量免受外界干扰、有高生产率的情况下,开发组能保持正确的工作目标,同时可及时响应需求的变化等比较棘手的问题。

2.3 软件设计模式的特点
设计模式是(面向对象)设计经验的凝结,有以下特点:
(1) 设计模式侧重于系统动态行为特征的分析和抽象。
(2) 设计模式更侧重于对象组合而不是继承。
如今软件系统的演化越来越依赖于对象复合而不是类继承,继承常被认为破坏了封装性(子类揭示了父类的实现细节,其实现与父类有紧密的依赖关系)基于对象组合可使类的层次和数量减少,从而设计更为简洁,可扩展性好。
(3) 设计模式为类继承中的层次划分提供指导。
面向对象设计中类的层次划分至关重要,类可分为哪几个层次,哪些方法、属性应该在哪个层次引入等等。类的层次划分过少将导致设计的封装性差,过多则导致程序笨重而失去可维护性、可调整性、可扩展性。设计模式从系统动态行为特征的角度,将类之间的相互作用进行分层包装,在此基础上合理分配各方法属性。

3. 软件设计模式与框架的比较
与设计模式非常相近的一个概念是框架(Framework)。软件框架是一个可复用的小型体系结构(Architecture),在一个给定的范畴内为一族软件抽象产物(abstractions)提供通用的结构和行为。通常情况下,框架不是一个完整的应用系统,它规定了应用系统的体系结构,并提供一系列固定的插口和配置点供使用者将其客户化(Customization)后生成所需的应用软件。Erich Gamma认为,设计模式与框架有以下区别:
(1) 设计模式比框架更抽象。框架可以通过代码形式来具体实现或表达,但模式则不然,只有模式的实例才可具体化为代码;框架的一个好处是它可采用编程语言写出来,然后不仅可以运行而且可以直接复用,相反,设计模式在每次应用时须将其实现,而且设计模式还说明了意图,权衡和设计导致的后果。
(2) 设计模式是比框架更小的结构型元素。一个典型的框架包含了若干设计模式,反之则不然。
(3) 较之于框架,设计模式的应用更为广泛。框架通常有一个特定的应用领域,而设计模式则几乎可适用于任何应用类型。

4. 结束语
软件模式是人们在长期的开发实践中良好经验的结晶,它提供了一个简单、统一的描述方法,使人们可以复用这些软件设计方法、过程管理经验。但是,由于软件模式是设计经验的抽象和提炼,对其理解较为困难,如何在设计中运用尚缺乏系统的、理论化的方法指导,是目前亟需进一步研究的课题。

References:
[1]Erich Gamma等。Design Patterns, Addison-Wesley,1995
[2] Patterns Website : http://hillside.net/patterns/
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值