拿到这本书,就感觉POSA是继GoF之后的又一经典之作。
序中介绍,
- POSA拓展了模式的范围,从原来的设计模式,拓展了新的高层次的体系机构模式,和底层的和程序设计语言相关的惯用法模式。
- 提出了新的模式分类方法 (根据规模/抽象层次)
- 提出了模式系统,来帮助我们利用模式来设计
什么是模式:
模式是一个描述,它描述了一个经过了前人实践充份考量过的解决方案的纲要。这个解决方案纲要可以指导我们解决一个问题族, 即 “在特定的设计环境中重复出现的相似问题”。这个纲要的主要内容是介绍需要创建的各个组件的职责和他们之间的协作策略。
内涵 vs. 外延
如果从内容(内涵)和形式(外延)的角度看模式,可见模式的内容是小的,它毕竟只描述了特定环境下一类问题的解决纲要。
所以模式的表现形式是多样的,都出现了专门的“模式风格”的模式表现形式研究分支(不过俺没有兴趣)。譬如,POSA中模式的表现形式与GoF中有些不同,不过区别不大,表现为三个最主要的部分:
- 语境:问题出现的特定场景
- 问题:what's the prolem? ( Requirement, Constrain, Characters )
- 解决纲要:The schema of the solution
如果从纲要(内容)和方案(外延)的角度来看,模式描述的解决纲要是比较大的,这表现在采用了某个模式而设计的解决方案,通常变数比较少,具有相同/相似的组成结构,行为方式和特性。通常,可以依照模式设计出很多软件框架(Framework),如果设计变数很多的话,是不可能做到的。譬如,ACE_REACTOR框架就是REACTOR模式的实现。
模式系统
模式系统统一描述模式分类,说明模式之间的关系,说明他们之间如何相互交织。
模式类别: POSA根据,模式中纲要所涉及的范围和抽象层次,定义了三个类别/层次:
- 体系结构模式: 提供了一套预定义的子系统,规定他们的职责,并包括了如何组织这些子系统的规则和指南。如此,体系结构模式捕获了软件整体构建中的常用原理。
- 设计模式:提供了用于细化各个子系统和组件的结构和通讯策略的纲要。如此,设计模式捕获了在定义了系统整体结构之后,解决那些常见问题的办法。
- 惯用法模式:如何用特定的编程语言来实现一些特定的功能和特性。总是和特定的编程语言相干,如此,惯用法模式捕获了很多编程经验。
模式关系: 模式不是孤立的它们有着:( 抽象—细化),(主体—变体), (部分—组合)的关系。理解和理顺这些关系是综合应用各个模式来设计系统的关键。POSA模式系统,和GoF的模式关系图,就是为我们做了这方面的研究。
模式是软件设计方法学的很好的补充,正如俺为"OO&Pattern"写的标题分类说明中所写的那样,Pattern让你站在了巨人的肩上,OO是你手中的利剑,你将无往而不利。
不过,还是要说Pattern并没有强制你一定要用OO,不过个人认为,用OO的时候最好是要运用Pattern,运用Pattern的最好的环境还是OO设计时。利剑还是让巨人来挥舞才有气势,有作用;巨人没有利剑,力气大也不顶事,对不? :-)