构件为一系列有固定顺序的计算单元,构件之间只通过数据交互。每个处理步骤都是独 立的程序,每一步必须在前一个步结束后才能开始,数据必须以完整的、整体的方式传 递。
典型实例: - windows下的bat程序 批处理和管道过滤器风格比较: - 共同点:把任务分成一系列固定顺序的计算单元(组件),组件间只通过数据传递交互 - 不同点:批处理是全部的,高潜伏性的,组件之间无合作,无交互;而管道过滤器是 递增的,数据结果延迟小,有反馈,可交互
每个构件都有一组输入和输出,构件读入输入的数据流,经过内部处理,得到输出的数 据流,这里的构件称作过滤器,连接件就是数据流传输的管道。
典型实例: - unix下的shell,unix即提供符号以连接各部分(进程),又提供某种进程运行时机制 以实现管道 - 传统的编译器,一个阶段(词法分析、语法分析、语义分析和代码生成)的出输出是另 一个阶段的输入 - MapReduce,是用来并行计算大规模海量数据的,这需要把工作流划分到大量的机器 上 优点: - 构件具有良好的隐蔽性和高内聚、低耦合的特点,允许设计者将一个系统的整体输入 /输出行为理解为各个独立过滤器行为的简单合成 - 支持软件重用,只要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被 连接起来 - 系统的维护反性能增强简单,新的过滤器可以添加到现有系统,或者利用改进的过滤 器替换老的过滤器 - 支持并行执行,每个过滤器都是作为一个单独的任务完成,因此可与其他任务并行
单线程控制,把问题划分为一系列处理步骤,构件即是主程序和子程序,子程序通常组 合成模块;过程调用作为交互机制,充当连接件;其语义逻辑表现为主程序的正确性取 决于它调用的子程序的正确性。
典型实例: - 早期结构化程序
这种风格的构件即是对象,也称抽象数据类型的实例,数据表示和其相应的操作封装在 对象中;连接件是对象的交互方式,对象以函数和过程调用来交互;对象是一种被称为 管理者的构件,它维护自身资源的完整性。
特征: - 对象负责维护其表示的完整性 - 对象的表示对其它对象是隐蔽的,因为一个对象对它的客户隐蔽了自己的表示,所以 这个对象可以不影响它的客户就能改变其实现方法 优点: - 因为对象对其它对象隐藏了它的表示,所以可以变一个对象的表示,而不影响其他的 对象 - 设计者可以把一些数据存取操作的问题分解成一些交互的代理程序的集合 缺点: - 为了使一个对象和另一个对象通过过程调用等进行交互,必须知道对象的标识,只要 一个对象的标识改变了,就必须修改所有其他明确调用它的对象 - 必须修改所有其他明确调用它的对象,并消除由些带来的一些副作用。例如:如果A 使用了对象B,C也使用了对象B,那么,C对B的使用所造成的对A的影响可能是预想不 到的 - 不同对象的操作关联性弱
层次系统实现为一个层次结构,构件在一些层实现了虚拟机;连接件通过决定层之间如 何通信的协议来定义,拓扑约束包含相邻层间交互的约束;这扉风格的特点是每层为上 一层提供服务,使用下一层的服务,只能看自相邻接的层;修改某一层,至多影响两 层,通常只影响上一层;上层必须知道下层的身份,不能调整层之间的顺序。
优点: - 支持基于抽象程度递增的系统设计,使得设计者可以把一个复杂的问题按递增步骤分 解开 - 支持功能扩展,每一层至多和相邻的层次交互 - 支持复用,只要服务接口定义不变,不同的实现可以交换使用 缺点: - 适用面不宽 - 并不是每个系统都可以很容易的划分为层次结构,即使程序逻辑结构是层次化的,出 于系统性能的考虑,设计师往往不得不把一些低级和高级功能综合起来 - 很难找到一个合适的,正确的分层抽象方法
文章来源于课课家在线学习平台,转载请注明。
上一篇:通用软件架构风格有哪些?
¥1888.00
¥499.00
¥10500.00
¥5999.00
¥49.00