




已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章软件体系结构风格与设计模式 1 前言 1 软件体系结构是软件工程的一个重要研究内容2 软件体系结构的设计是软件开发中的一个关键环节 是软件质量的重要保证 3 软件体系结构已经成为一个重要的研究方向和独立的学科分支 4 软件体系结构对软件的总体结构进行清晰的描述和分析 并用它指导软件的后续开发 5 模式的本质 可解决一类问题并能重复使用的解决方案 内容 7 1基本概念7 2软件体系结构描述语言7 3软件体系结构风格7 4设计模式 基本概念 软件设计模式 广义定义 可解决一类软件问题并能重复使用的软件设计方案狭义定义 设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述 是在类和对象的层次描述的可重复使用的软件设计问题解决方案 基本概念 软件体系结构风格 是在构件和连接子的层次所描述的可重复使用的软件设计问题解决方案 基本概念 二者的共性和区别 区别 1 设计模式是在类和对象的层次描述问题 粒度较小 2 体系结构风格是在构件和连接子的层次描述问题 粒度较大 体系结构风格是广义上的设计模式 共性 都是可重复使用的软件设计问题解决方案 内容 1 1基本概念1 2软件体系结构描述语言1 3软件体系结构风格1 4设计模式 软件体系结构描述语言 软件体系结构描述语言ArchitecturalDescriptionLanguage 简称ADL是用来描述软件密集型系统的总体结构的语言 说明系统众多部件之间的结构关系 代表性的体系结构描述语言 WrightRapideDarwinUnicon ACMEABC ADLXYZ ADLXADL 大部分结构描述语言都有构件 连接子 配置等概念 软件体系结构描述语言 WrightADL构件 Component 连接子 Connector 端口 Ports 构件规范 Component spec 计算 Computation 配置 Configuration 角色 Roles 粘连 Glue 实例 Instances 联接 Attachments WrightADL 过程调用实例 一个Caller类型的构件c通过D C connector类型的连接子dc调用Definer类型的构件d 调用实例的Wright体系结构描述 图形化的体系结构描述语言GADL GADL的元模型 图形化的体系结构描述语言GADL 调用实例的GADL体系结构描述 构件图 构件连接子端口角色 图形化的体系结构描述语言GADL 调用实例的GADL体系结构描述 类图 图形化的体系结构描述语言GADL 一个图形化的体系结构描述语言GADL调用实例的GADL体系结构描述 协议类图和顺序图 Wright与GADL GADL语言用构件图 类图 顺序图等方式描述系统的软件体系结构 对行为的描述GADL用顺序图 而Wright用进行代数CSP 内容 1 1基本概念1 2软件体系结构描述语言1 3软件体系结构风格1 4设计模式 软件体系结构风格 在构件和连接子的层次上描述的可重复使用的软件设计问题解决方案 管道 过滤器风格层次风格客户 服务器风格 核心特征 应用场景 注意的问题 1 管道 过滤器风格 实例剖析 统计a txt中单词的个数并打印出来 shell命令 cata txt wc w lpr 1 cat命令输出a txt的内容2 通过管道传给命令wc 统计输入流中单词的个数并输出3 输出的单词数通过管道传给命令lpr lpr将其打印出来 构件图命令是构件 管道是连接子 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr 类图 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr WriteData协议类图和顺序图 1 管道 过滤器风格 实例剖析 shell命令 cata txt wc w lpr ReadData协议类图和顺序图 1 管道 过滤器风格 实例剖析 打印a txt中soft的个数 cata txt grep osoft wc w lpr 构件图 1 管道 过滤器风格 特征 系统中构件之间通过数据流松散耦合 也就是说 构件之间的依赖仅仅是数据流 而不是通常的接口函数调用或消息传递 其他典型应用 编译器 信号处理等 其他说明 本模式在实现上可以有许多不同的变化 如主动与被动 多出口管道等 2 层次风格 实例剖析 数据库系统 2 层次风格 实例剖析 数据库系统 数据库服务端口db 2 层次风格 特征 从向外提供服务的构件出发 沿着连接关系递次搜索各构件和连接子 如果形成的拓扑结构是一个有向无圈图 典型情况下是一个线性结构 那么这个系统的体系结构风格就是层次式的 这种设计风格便于将复杂的系统进行分解 同时也便于构件替换 只要保持接口一致 就可以将某一层的软件替换掉 而不会影响到系统的其他部分 2 层次风格 其他典型应用 开放系统互联 OSI 七层网络模型 WindowsNT操作系统的内核结构 2 层次风格 其他说明 优点是结构清晰 可替换性好 便于控制复杂性 但也有它的缺点 如效率低 分层结构中高层的数据要经过层层传递和转发 从而降低系统效率 3 客户 服务器风格 实例剖析 FTP系统 3 客户 服务器风格 特征 从向外提供服务的构件出发 沿着连接关系递次搜索各构件和连接子 如果形成的拓扑结构是一棵倒置的树 那么这个系统的体系结构就是客户 服务器风格的 这种风格使得服务功能的实现很集中 便于系统实现 因而得到广泛使用 3 客户 服务器风格 其他典型应用 电子邮件系统 WWW系统 TELNET系统 CVS版本控制系统等 数据库服务器可以向多个浏览器实例提供服务 还可以向CVS系统提供服务 3 客户 服务器风格 其他说明 在客户 服务器风格的系统中 服务器是资源和计算的集中地 因此容易成为存储和计算瓶颈 实际应用中为了提高服务器的性能 可能要采用集群处理等办法 同时 这个特点也使得这类系统容易遭受拒绝服务 DenyOfService 攻击 因此在设计和应用中要作针对性考虑 此外 在这种风格的系统中 服务器中往往要存储更多客户的状态信息 因此大量使用并发执行技术 如多进程 多线程等 这也就涉及到进程 线程的动态创建 调度 删除等问题 这些问题处理得好坏直接影响到服务器的性能 内容 1 1基本概念1 2软件体系结构描述语言1 3软件体系结构风格1 4设计模式 设计模式 文献 7 2 中描述了23个设计模式 并将它们分为三种类型 创建型设计模式 结构型设计模式和行为型设计模式 设计模式 FactoryMethod 工厂方法 AbstractFactory 抽象工厂 Singleton 单件 Composite 组合 Proxy 代理 Iterator 迭代器 Observer 观察者 动机和实例 应用场合 结构 核心思想 1 FactoryMethod 动机与实例 龙珠 游戏 魔力管道 弹球 pop 制造球 Enchant 球 1 FactoryMethod 动机与实例 龙珠 游戏 设计1 球有多种 如皮球 钢球Ball抽象父类Ball无法被实例化 1 FactoryMethod 动机与实例 龙珠 游戏 设计2 newBall动作包装成虚函数MakeBallFactoryMethod在子类 描述各种魔力管道 中重新定义该虚函数 1 FactoryMethod 适用场合 有一些实体 各种魔力管道 它们的结构和行为是相似的 且都包含一些相似的更小实体 各类球 但一个大实体内部的这些小实体都是同一类的 一种魔力管道内只有一种球 此时 如果各类小实体的描述构成一个类层次 那么可使用FactoryMethod模式 将各类大实体也描述为一个类层次 1 FactoryMethod 结构 1 FactoryMethod 核心思想归纳 在父类中 将创建对象的操作包装为一个虚函数 在描述公共行为的过程中调用该函数 在子类中重定义该虚函数来定制创建的对象 从而间接定制公共行为 利用虚函数的多态机制 FactoryMethod模式使得父类可集中描述公共行为 而将特别行为 不同对象的创建 抽放于子类 2 AbstractFactory 动机与实例 魔力管道 在前面的设计中 三个MakeBallFactoryMethod工厂方法散放在三个MagicPipe类中 为了降低复杂性 可以把所有的创建动作拆分出来单独考虑 即 创建球的动作单独形成一个工厂类 专门创建对象 2 AbstractFactory 动机与实例 设计3 2 AbstractFactory 动机与实例 设计4 不仅有球 还有盒子等小实体 抽象工厂类专门创建各种小实体 2 AbstractFactory 动机与实例 设计5 混合管道和小实体 2 AbstractFactory 适用场合 当需要创建一组多种风格的小实体 且具体创建方式又要灵活可调整时 可使用AbstractFactory模式 将公共的创建行为描述为一个抽象类 而将具体的创建方式用该抽象类的子类来描述 2 AbstractFactory 结构 2 AbstractFactory 核心思想归纳 为了提供灵活性 将需要创建的同一风格的一组小实体的一般特征提取出来 用一组抽象产品类来描述 同时将创建行为封装为一个抽象工厂类 提供通用的创建接口 而将各种具体的产品和具体的创建行为用抽象产品类和抽象工厂类的子类来描述 从而使得BigEntity和具体的产品特性和具体的创建行为隔离开来 既降低了耦合度 也使得灵活调整创建行为成为可能 3 Singleton 动机与实例 日志功能 在一个应用程序内部一般只需要一个日志实例即可 实现方案1 3 Singleton 实现方案1 3 Singleton 实现方案1 3 Singleton 实现方案1 两个缺陷一般情况下 如果只有一个日志文件 只需要一个Log实例即可 但上述做法不能保证Log的实例只有一个 当多个实例设置相同的日志文件的时候 还可能引起冲突 这种做法使得g log无论用到与否都要被创建 3 Singleton 实现方案2 使用Singleton模式 3 Singleton 实现方案2 使用Singleton模式 3 Singleton 实现方案2 使用Singleton模式 3 Singleton 适用场合 当需要确保一个类最多只有一个实例时 使用本模式 3 Singleton 结构 设需要保证只有一个实例的类为Singleton 则类Singleton的定义为 3 Singleton 结构 类Singleton的实现为 3 Singleton 核心思想归纳 通过将一个类的构造函数设置为protected或private 可有效阻止从外部直接创建该类的实例 同时设置一个静态成员函数 以负责创建唯一的实例并向外提供访问接口 4 Composite 动机与实例 幻灯片制作软件 一张幻灯片上可以有各种图元对象 文本框 图形 图像 影片 声音等等 图元具有 递归组合 特性 4 Composite 适用场合 当需要描述的对象具有 递归组合 特征 且希望用户忽略基本对象与组合对象的区别时 适用本模式 结构 4 Composite 核心思想归纳 为基本对象和组合对象提供一个公共的抽象父类 以表示所有对象 并建立起从该抽象父类到组合对象类的聚集关联 从而间接建立起 递归组合 特性 5 Proxy 动机与实例 网络中间件 在这类程序中 实际工作的对象可能运行在远程的主机上 与客户端应用分别处于不同的地址空间 为了编程方便 在其中大量地使用了Proxy模式 建立一个Proxy对象 它与Server对象的接口是一样的 而且与Client对象位于同一台机器 同一地址空间中 所有发给它的操作请求最终都转发Server对象 给使Client对象的设计开发变得简单 就像本地编程一样 网络交互的许多细节则集中到Proxy对象的实现中 5 Proxy 适用场合 前面的例子中使用Proxy模式是为了屏蔽网络交互细节 透明进行远程访问 因此属于 远程代理 还有一些场合是为了提高性能 降低开销 而设置一个 虚代理 如文档文件中的图像代理 它只描述图像的位置 大小等基本信息 具体图像文件细节仅在需要时再创建一个真正的图像对象来描述 另外 当被访问对象的内部结构很复杂且需要进行智能的分析 决策和协调时 可使用 智能代理 来屏蔽这些智能决策的细节 如一个 订票 代理就是如此 它可根据多家航空公司的订票服务 智能选择一种符合用户要求的订票方案 5 Proxy 结构 5 Proxy 核心思想归纳 构造一个具有相同接口的代理对象 然后将操作请求转发给真实对象 其目的是向客户隐藏 转发过程 的细节 如远程网络交互 智能决策 选择性转发等 提供对真实对象的透明访问 6 Iterator 动机与实例 支持遍历的列表设计 设计方案1 6 Iterator 动机与实例 支持遍历的列表设计 设计方案1的问题 其一 这种设计只能描述一种遍历方式 如向前遍历或向后遍历 但不能同时描述多种遍历方式 或许 大家觉得只需要再向List里面增加一些表示遍历的接口函数和表示位置的成员变量即可 但这样一来众多关系不紧密的功能混放在一个类里 会使得内聚程度变低 容易导致类膨胀 同时也给函数命名等带来不便 其二 这种设计不支持在一个列表上同时进行多个相同类型的遍历 如都是向后遍历 只是对元素的处理方式不同 而这种情况可能出现在并行程序中 6 Iterator 设计方案2 在一个列表上同时进行多个相同类型的遍历 使用Iterator模式 将负责遍历的部分功能从List中分离出来 单独形成一个类ListIterator 6 Iterator 设计方案2 在一个列表上同时进行多个相同类型的遍历 ClassListIterator Private constList list ListIterator增加指向原列表的指针 因此 一个ListIterator实例记录了与列表的一次遍历相关的所有信息 通过定义ListIterator的多个实例变量 就可以在一个列表上同时进行多个相同类型的遍历 6 Iterator 设计方案3 以多种方式遍历一个列表 再定义一个迭代器类型 6 Iterator 适用场合 当需要以多种方式灵活地遍历一个聚合对象中的各个元素时 适用本模式 结构 6 Iterator 核心思想归纳 通过将与遍历有关的部分从聚合对象的描述中分离出来 单独成类 能够
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏装配示范复合项目实施方案
- 构建高效边远地区医学救援体系方案
- 供热一次管网更新改造项目可行性研究报告
- 山西省朔州市怀仁市第九中学高中部2023-2024学年高一上学期11月期中地理 含解析
- 长江师范学院《网络创业与创业管理》2023-2024学年第二学期期末试卷
- 定西职业技术学院《幼儿歌曲伴奏与弹唱(二)》2023-2024学年第二学期期末试卷
- 郴州思科职业学院《昆虫学》2023-2024学年第二学期期末试卷
- 南开大学滨海学院《过程仿真》2023-2024学年第二学期期末试卷
- 湖南理工学院《机器学习与模式识别》2023-2024学年第二学期期末试卷
- 吉林动画学院《金属腐蚀学》2023-2024学年第二学期期末试卷
- 电镀有限公司双体系资料之风险分级管控体系实施手册
- 【医院管理案例学习】-床单位终末消毒标准的执行
- 暗挖格栅加工技术交底
- 2023年安徽省公安机关警务辅助人员条例训练题库211题及答案
- EMS概要设计说明书计费模块
- 矿山安全培训课件-矿山地质安全
- (完整)被动防护网施工方案
- 《高层建筑火灾扑救》教学课件
- 东师《德育与班级管理》题库与答案
- 江西省医疗服务价格手册
- 义务教育初中地理课程标准2022版
评论
0/150
提交评论