1 管道-过滤器风格
1.1 定义
每个构件都有一组输入和输出,构件读输入的数据流,经过内部处理,产生输出数据流。
1.2 构件和连接子
构件是过滤器,连接件是管道。
1.3 特点
优点:
(1)构件具有良好的隐蔽性,具有高内聚,低耦合的特点
(2)可将整个系统看作过滤器的合成
(3)支持软件重用
(4)系统维护简单,增强性能简单
(5)允许一些属性如吞吐量,死锁等的分析
(6)支持并行执行
缺点
(1)导致进程成为批处理结构
(2)不适合处理交互的应用
(3)数据传输没有通用标准,增加复杂性,性能下降
1.4 批处理序列风格与管道过滤器风格对比
共同点:把任务分成一系列固定顺序的组件,组件间通过数据传递交互
区别:批处理是输入处理全部的,无合作,无交互,强调整体,管道过滤器是输入处理局部化,递增的,有反馈,有交互。
1.5 应用场合
早期的编译器
UNIX shell 编写的程序
客户端请求消息的解析与处理,包括HTTP包头分离,SOAP解析等
2 面向对象风格
2.1 定义
建立在数据抽象和面向对象的基础上,数据的表示方法和它们的相应操作封装在一个抽象数据类型或对象中。
2.2 构件和连接子
构件是对象,连接件是对象间的交互方式。
2.3 特点
优点:
(1)对象对其它对象隐藏它的表示
(2)可将一些数据存取操作的问题分解成一些交互的代理程序的集合
缺点:
(1)交互时(过程调用或函数调用)必须知道对象的标识
(2)必须修改所有显式调用它的其它对象
3 层次结构风格
3.1 定义
每层为上层提供服务,作为下层客户使用下层服务,一般中间层只对相邻层可见。构件组成一个层次结构,连接件通过层间交互的协议来定义。
3.2 构件和连接子
构件由层次结构组件组成,连接件由层间交互协议定义
3.3 特点
优点:
(1)可以把一个复杂的系统按抽象程度的递增进行分解
(2)支持功能增强,因为每一层至多与上下层交互,功能的改变至多影响相邻层
(3)支持软件重用
缺点:
(1)层次划分困难
(2)层次抽象方法困难
3.4 应用场合
4 事件驱动系统风格 (隐式调用风格)
4.1 定义
构件不直接调用一个过程,而是触发或广播事件。构件的过程在事件中注册,当事件被触发,系统自动调用这个事件中注册的过程。
4.2 构件和连接子
构件是一些模块,这些模块可以是过程或事件。连接件以过程之间的隐式调用来实现。
4.3 特点
优点:
(1)支持软件重用
(2)支持功能增强
缺点:
(1)构件放弃了对系统计算的控制
(2)共享数据问题
4.4 应用场合
Windows操作系统用户界面
调试器断点功能
机器人根据自身状态和外界环境动态调整,自动完成任务
5 解释器风格
5.1 定义
一个解释器通常包括完成解释工作的解释引擎,一个包含解释代码的存储区,一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行进度的数据结构。
5.2 特点
优点:
增加架构的灵活性,通过人为构建一个运行环境,解释和运行自定义的一些语言
缺点:
执行效率较低
5.3 应用场合
JAVA一次编译到处运行
即时战略游戏,玩家自定义地图
Web服务内部构件多用组合,形成新的业务功能
可视化界面的IDE,可通过拖拽元素直接实现功能
6 黑板系统风格
6.1 定义
由知识源,黑板数据结构,控制3部分组成。黑板数据即共享的中央数据仓库;控制完全由黑板的状态驱动,黑板状态决定使用特定的知识源;知识源通过不断改变黑板数据来解决问题。
6.2 构件和连接子
构件是中央数据结构和外部独立构件即知识源。
连接子取决于控制原则的选取。
若外部构件控制共享数据,则仓库是传统型数据库;
若共享数据当前状态触发控制外部构件,则仓库是黑板系统。
6.3 应用场合
现代编译器
语音识别系统