Chap7-软件体系结构风格与设计模式.ppt_第1页
Chap7-软件体系结构风格与设计模式.ppt_第2页
Chap7-软件体系结构风格与设计模式.ppt_第3页
Chap7-软件体系结构风格与设计模式.ppt_第4页
Chap7-软件体系结构风格与设计模式.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 软件体系结构风格与设计模式 董威 文艳军 陈振邦国防科技大学计算机学院 软件设计与体系结构 2 内容 7 1基本概念7 2软件体系结构描述语言7 3软件体系结构风格7 4设计模式 3 基本概念 软件设计模式 广义定义 可解决一类软件问题并能重复使用的软件设计方案狭义定义 设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述 是在类和对象的层次描述的可重复使用的软件设计问题解决方案 4 基本概念 软件体系结构风格 是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案 5 内容 1 1基本概念1 2软件体系结构描述语言1 3软件体系结构风格1 4设计模式 6 软件体系结构描述语言 软件体系结构描述语言ArchitecturalDescriptionLanguage 简称ADL是用来描述软件密集型系统的总体结构的语言代表性的体系结构描述语言 WrightRapideDarwinUnicon ACMEABC ADLXYZ ADLXADL 7 软件体系结构描述语言 WrightADL构件 Component 连接子 Connector 端口 Ports 构件规范 Component spec 计算 Computation 配置 Configuration 角色 Roles 粘连 Glue 实例 Instances 联接 Attachments 8 9 软件体系结构描述语言 一个图形化的体系结构描述语言GADL 10 软件体系结构描述语言 一个图形化的体系结构描述语言GADL例子 11 软件体系结构描述语言 一个图形化的体系结构描述语言GADL例子 12 软件体系结构描述语言 一个图形化的体系结构描述语言GADL例子 13 软件体系结构描述语言 一个图形化的体系结构描述语言GADL例子 14 内容 1 1基本概念1 2软件体系结构描述语言1 3软件体系结构风格1 4设计模式 15 软件体系结构风格 管道 过滤器风格层次风格客户 服务器风格 16 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr 17 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr 18 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr 19 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr 20 1 管道 过滤器风格 实例剖析 cata txt grep osoft wc w lpr 21 1 管道 过滤器风格 特征 系统中构件之间通过数据流松散耦合 也就是说 构件之间的依赖仅仅是数据流 而不是通常的接口函数调用或消息传递 其他典型应用 编译器 信号处理等 其他说明 本模式在实现上可以有许多不同的变化 如主动与被动 多出口管道等 22 2 层次风格 实例剖析 数据库系统 23 2 层次风格 特征 从向外提供服务的构件出发 沿着连接关系递次搜索各构件和连接子 如果形成的拓扑结构是一个有向无圈图 典型情况下是一个线性结构 那么这个系统的体系结构风格就是层次式的 这种设计风格便于将复杂的系统进行分解 同时也便于构件替换 只要保持接口一致 就可以将某一层的软件替换掉 而不会影响到系统的其他部分 24 2 层次风格 其他典型应用 开放系统互联 OSI 七层网络模型 WindowsNT操作系统的内核结构 25 26 2 层次风格 其他说明 优点是结构清晰 可替换性好 便于控制复杂性 但也有它的缺点 如效率低 分层结构中高层的数据要经过层层传递和转发 从而降低系统效率 27 3 客户 服务器风格 实例剖析 FTP系统 28 3 客户 服务器风格 特征 从向外提供服务的构件出发 沿着连接关系递次搜索各构件和连接子 如果形成的拓扑结构是一棵倒置的树 那么这个系统的体系结构就是客户 服务器风格的 这种风格使得服务功能的实现很集中 便于系统实现 因而得到广泛使用 29 3 客户 服务器风格 其他典型应用 电子邮件系统 WWW系统 TELNET系统 CVS版本控制系统等 30 31 3 客户 服务器风格 其他说明 在客户 服务器风格的系统中 服务器是资源和计算的集中地 因此容易成为存储和计算瓶颈 实际应用中为了提高服务器的性能 可能要采用集群处理等办法 同时 这个特点也使得这类系统容易遭受拒绝服务 DenyOfService 攻击 因此在设计和应用中要作针对性考虑 此外 在这种风格的系统中 服务器中往往要存储更多客户的状态信息 因此大量使用并发执行技术 如多进程 多线程等 这也就涉及到进程 线程的动态创建 调度 删除等问题 这些问题处理得好坏直接影响到服务器的性能 32 内容 1 1基本概念1 2软件体系结构描述语言1 3软件体系结构风格1 4设计模式 33 设计模式 文献 7 2 中描述了23个设计模式 并将它们分为三种类型 创建型设计模式 结构型设计模式和行为型设计模式 34 设计模式 FactoryMethodAbstractFactorySingletonCompositeProxyIteratorObserver 35 1 FactoryMethod 动机与实例 龙珠 游戏 36 1 FactoryMethod 动机与实例 龙珠 游戏设计1 37 1 FactoryMethod 动机与实例 龙珠 游戏设计2 38 1 FactoryMethod 适用场合 有一些实体 各种魔力管道 它们的结构和行为是相似的 且都包含一些相似的更小实体 各类球 但一个大实体内部的这些小实体都是同一类的 一种魔力管道内只有一种球 此时 如果各类小实体的描述构成一个类层次 那么可使用FactoryMethod模式 将各类大实体也描述为一个类层次 39 1 FactoryMethod 结构 40 1 FactoryMethod 核心思想归纳 在父类中 将创建对象的操作包装为一个虚函数 在描述公共行为的过程中调用该函数 在子类中重定义该虚函数来定制创建的对象 从而间接定制公共行为 利用虚函数的多态机制 FactoryMethod模式使得父类可集中描述公共行为 而将特别行为 不同对象的创建 抽放于子类 41 2 AbstractFactory 动机与实例 魔力管道 在前面的设计中 三个MakeBallFactoryMethod工厂方法散放在三个MagicPipe类中 为了降低复杂性 可以把所有的创建动作拆分出来单独考虑 42 2 AbstractFactory 动机与实例 设计3 43 2 AbstractFactory 动机与实例 设计4 44 2 AbstractFactory 动机与实例 设计5 45 2 AbstractFactory 适用场合 当需要创建一组多种风格的小实体 且具体创建方式又要灵活可调整时 可使用AbstractFactory模式 将公共的创建行为描述为一个抽象类 而将具体的创建方式用该抽象类的子类来描述 46 2 AbstractFactory 结构 47 2 AbstractFactory 核心思想归纳 为了提供灵活性 将需要创建的同一风格的一组小实体的一般特征提取出来 用一组抽象产品类来描述 同时将创建行为封装为一个抽象工厂类 提供通用的创建接口 而将各种具体的产品和具体的创建行为用抽象产品类和抽象工厂类的子类来描述 从而使得BigEntity和具体的产品特性和具体的创建行为隔离开来 既降低了耦合度 也使得灵活调整创建行为成为可能 48 3 Singleton 动机与实例 日志功能 在一个应用程序内部一般只需要一个日志实例即可 实现方案1 49 3 Singleton 动机与实例 日志功能 在一个应用程序内部一般只需要一个日志实例即可 实现方案1 50 3 Singleton 动机与实例 日志功能 在一个应用程序内部一般只需要一个日志实例即可 实现方案1 51 3 Singleton 动机与实例 日志功能 在一个应用程序内部一般只需要一个日志实例即可 实现方案1 两个缺陷其一 一般情况下 如果只有一个日志文件 只需要一个Log实例即可 但上述做法不能保证Log的实例只有一个 当多个实例设置相同的日志文件的时候 还可能引起冲突 其二 这种做法使得g log无论用到与否都要被创建 52 3 Singleton 动机与实例 日志功能 在一个应用程序内部一般只需要一个日志实例即可 实现方案2 使用Singleton模式 53 3 Singleton 适用场合 当需要确保一个类最多只有一个实例时 使用本模式 54 3 Singleton 结构 设需要保证只有一个实例的类为Singleton 则类Singleton的定义为 55 3 Singleton 结构 类Singleton的实现为 56 3 Singleton 核心思想归纳 通过将一个类的构造函数设置为protected或private 可有效阻止从外部直接创建该类的实例 同时设置一个静态成员函数 以负责创建唯一的实例并向外提供访问接口 57 4 Composite 动机与实例 幻灯片制作软件 一张幻灯片上可以有各种图元对象 文本框 图形 图像 影片 声音等等 图元具有 递归组合 特性 58 4 Composite 适用场合 当需要描述的对象具有 递归组合 特征 且希望用户忽略基本对象与组合对象的区别时 适用本模式 结构 59 4 Composite 核心思想归纳 为基本对象和组合对象提供一个公共的抽象父类 以表示所有对象 并建立起从该抽象父类到组合对象类的聚集关联 从而间接建立起 递归组合 特性 60 5 Proxy 动机与实例 网络中间件 在这类程序中 实际工作的对象可能运行在远程的主机上 与客户端应用分别处于不同的地址空间 为了编程方便 在其中大量地使用了Proxy模式 61 5 Proxy 适用场合 前面的例子中使用Proxy模式是为了屏蔽网络交互细节 透明进行远程访问 因此属于 远程代理 还有一些场合是为了提高性能 降低开销 而设置一个 虚代理 如文档文件中的图像代理 它只描述图像的位置 大小等基本信息 具体图像文件细节仅在需要时再创建一个真正的图像对象来描述 另外 当被访问对象的内部结构很复杂且需要进行智能的分析 决策和协调时 可使用 智能代理 来屏蔽这些智能决策的细节 如一个 订票 代理就是如此 它可根据多家航空公司的订票服务 智能选择一种符合用户要求的订票方案 62 5 Proxy 结构 63 5 Proxy 核心思想归纳 构造一个具有相同接口的代理对象 然后将操作请求转发给真实对象 其目的是向客户隐藏 转发过程 的细节 如远程网络交互 智能决策 选择性转发等 提供对真实对象的透明访问 64 6 Iterator 动机与实例 支持遍历的列表设计 设计方案1 65 6 Iterator 动机与实例 支持遍历的列表设计 设计方案1的问题 其一 这种设计只能描述一种遍历方式 如向前遍历或向后遍历 但不能同时描述多种遍历方式 或许 大家觉得只需要再向List里面增加一些表示遍历的接口函数和表示位置的成员变量即可 但这样一来众多关系不紧密的功能混放在一个类里 会使得内聚程度变低 容易导致类膨胀 同时也给函数命名等带来不便 其二 这种设计不支持在一个列表上同时进行多个相同类型的遍历 如都是向后遍历 只是对元素的处理方式不同 而这种情况可能出现在并行程序中 66 6 Iterator 动机与实例 支持遍历的列表设计 设计方案2 67 6 Iterator 动机与实例 支持遍历的列表设计 设计方案2 以多种方式遍历一个列表 68 6 Iterator 适用场合 当需要以多种方式灵活地遍历一个聚合对象中的各个元素时 适用本模式 结构 69 6 Iterator 核心思想归纳 通过将与遍历有关的部分从聚合对象的描述中分离出来 单独成类 能够将遍历的状态信息用一个独立对象记录 从而可有效处理多种遍历和并发遍历 另外 本模式可与FactoryMethod模式配合使用 支持从聚合对象直接创建相应的聚合器 70 7 Observer 动机与实例 Word软件的 窗口拆分 功能 71 7 Observer 动机与实例 Word软件的 窗口拆分 功能 72 7 Observer 动机与实例 Word软件的 窗口拆分 功能 73 7 Observer 动机与实例 Word软件的 窗口拆分 功能 74 7 Observer 适用场合 如果对象之间存在一对多的数据依赖关系 且当被依赖对象的数据改变时所有依赖于它的对象都应得到通知并自动更新 那么可使用本模式 被依赖的对象称为发布者 负责发布数据并通知所有的订阅者 即依赖于该发布者的对象 以便订阅者与发布者的状态保持一致 前面的例子中 Document对象为发布者 而Window对象为订阅者 因此 本模式也称为发布 订阅

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论