软件建筑讲座8.ppt

《软件体系结构第8讲.ppt》由会员分享,可在线阅读,更多相关《软件体系结构第8讲.ppt(39页珍藏版)》请在usdt平台_usdt官网上搜索。文档结构:文本的数据结构安排。所有的编辑、格式安排、显示和文本分析都涉及到这样的文档结构。格式化:Lexi是如何来创建数据结构的?希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象,Lexi的文档结构与组合(...

《软件 8.ppt》为会员分享,可在线阅读。更多相关《软件架构讲座8.ppt(39页珍藏版)》,请访问usdt平台_搜索usdt官网。

1、1、软件架构第8讲:设计模式(1、江河、2、内容介绍、设计模式概念设计模式说明案例:文档编辑器Lexi Lexi的文档结构与组合()模式,3,设计模式概念,:“每个模式都描述了我们周围反复出现的问题,以及解决该问题的核心。这样,您可以一次又一次地使用该解决方案,而不必做重复的工作.” : - 软件:设计模式是“对类和对象的描述,这些类和对象之间相互通信,用于解决特定场景中的一般设计问题,4、设计模式概念,设计模式的四个基本要素: 模式名称(Name):助记名,使用一两个词

2、 来描述模式的问题、解决方案和效果。():描述何时应该使用模式。() 描述了设计的组件,它们如何相互关联,以及它们各自的职责和协同工作的方式。() 描述了模式应用的效果和使用模式的权衡,5、设计模式概念、6、设计模式描述、模式名称和分类模式名称简洁地描述了模式的本质。模式可以分为创造型、结构型和行为型。 是一个简单的陈述,它回答了以下问题:设计模式做什么?它的原理和意图是什么?它解决了什么具体的设计问题?Alias 的其他名称,7,设计模式的描述,

3、问题的具体上下文。此场景将帮助您理解对以下模式的更抽象描述。适用性 什么时候可以使用这种模式?这种模式可以用来改进哪些糟糕的设计?您如何识别这些情况?结构图形化地描述了模式中的类,解释了请求顺序和对象之间的协作关系, 8、设计模式的描述,参与者设计模式中的各种对象、类及其各自的职责。协作模型中的参与者如何协作以履行其职责。效果模式如何支持其目标?使用模式的影响和需要做出的权衡?系统结构的哪些方面可以独立改变,9、设计模式的描述,实现实现模式时要知道的一些技巧,要避免的技术点和陷阱,以及是否存在一些特定于实现语言的问题。在 C++/ 中实现此模式的代码示例代码

4、代码片段。已知在实际应用系统中可以找到这种模式的示例。相关模式,10,案例研究:文档编辑器 Lexi,11,案例研究:文档编辑器 Lexi,Lexi 设计文档结构中的 7 个问题:文本的数据结构排列。所有的编辑、格式化、显示和文本分析都涉及到这样的文档结构。格式化:Lexi 如何创建数据结构?哪些对象负责不同的格式化策略?装饰用户界面:Lexi 的用户界面包括滚动条、边框和阴影来装饰文档界面 可以进行重大修改以适应不同的视觉标准。例如,Motif 支持多个窗口系统:不同的视觉标准通常在不同的

5、在窗口系统上实现。Lexi 应该被设计成尽可能独立于窗口系统。用户操作:用户通过不同的界面操作 Lexi,包括按钮和下拉菜单。拼写检查和断字:Lexi 如何支持拼写检查和确定断字的断字点等分析操作?当我们要添加新的分析操作时,如何尽量少修改相关类,13、Lexi的文档结构和组合()模式,Lexi其实考虑的是如何排列字符、线段、多边形、图像的基本元素, 等等。 。在使用 Lexi 的过程中,用户想要操作的不是单个字符、行、列、表、页等。行、列、表、页等都是子结构,它又可以包含更小粒度的子结构。字符、线段等可视为没有子结构的原子结构,14

6、, Lexi的文档结构和组合()模式, 字符, 图片, 行, 列, 15, Lexi的文档结构和组合()模式, 字符和线段等原子结构与一般子结构的关系, 16字符、线段等原子结构的动作与一般子结构的动作基本相同:Draw 在屏幕上绘制,判断当前光标是否在自身上。继承自基类,Lexi的文档结构和组合()方式,17、图元,18、字符、线段等原子结构和通用子结构都继承自图元。其中,row、等类包含大量的成员变量,这些成员变量都是原语的实例。

7、这种通用子结构的关系其实是()模式,Lexi的文档结构和()模式,19,()模式打算把对象组合成一个树形结构来表示“part-whole”层次结构. Lexi的文档结构和()模式,20、()模式动机在图形编辑器和图形捕获系统等应用程序中,用户可以使用简单的组件创建复杂的图表。用户可以将多个简单的组件组合成更大的组件,这些组件又可以组合成更大的组件。一个简单的实现方法是用不同的类定义不同粒度的组件,比如word

8、符号、线条等简单的原语定义了一些类,将行和列的其他类定义为简单原语的容器类。但是用户可能会认为这些容器类在使用过程中的行为与简单的原始类相同!虽然该模式试图解决这样一个问题,但它描述了如何使用递归组合,以便用户不必区分这些类,如 Lexi 的文档结构和 () 模式所示,21,抽象基类必须是能够反映原子基元的特征,而基元又应该能够反映一般子结构的特征,22、23、

9、) 模式,24,Lexi的文档结构和()模式,()模式结构,25,Lexi的文档结构和()模式,26,()模式,()是中的对象声明接口在适当的情况下实现了所有类共有的接口的默认行为。声明一个用于访问和管理子组件的接口。在递归结构中定义一个用于访问父组件的接口。在Leaf(, Line, Text, etc.)表示组合中的叶子节点对象的情况下实现它,叶子节点在组合中没有子节点定义原始对象Comp的行为

10、osite() 定义那些具有子组件的组件的行为。子组件在接口中实现与子组件相关的操作。通过接口操作复合组件的对象,Lexi 的文档结构使用() 模式,27,() 模式与用户协作软件体系结构第二版下载,使用类接口与复合结构中的对象进行交互。如果接收者是叶节点,则直接处理请求。如果接收者是,那么它通常将请求发送到其子组件,可能在转发请求之前/之后执行一些辅助操作。Lexi的文档结构与()模式有关,28、()模式效果定义了包含基本对

11、对象和组合对象的类层次结构 基本对象可以组合成更复杂的组合对象,这些组合对象又可以组合。简化的客户端代码 客户端可以一致地使用复合结构和单个对象。客户通常不知道也不关心他们是在处理叶节点还是复合组件。这简化了客户端代码,因为不需要在那些定义组合的类中编写充满选择语句的函数。更容易添加新类型的组件。新定义的或 Leaf 子类自动与现有结构和客户端代码一起工作,客户端程序不需要因新类而更改。为了让你的设计更通用,Lexi 的文档结构和 () 模式,29,

12、使用共享组件最大化接口声明管理子组件的操作应该实现列表子组件排序使用缓存提高性能谁应该删除存储组件哪种数据结构最好使用,Lexi的文档和()模式,30,代码示例 计算机和立体声音响等设备通常组装成部分整体层次结构或容器层次结构。例如,机箱可能包含驱动器和面板,总线可能包含多个插件,机柜可能包含机箱、总线等。这个结构可以很自然的用一个模式来模拟软件体系结构第二版下载,Lexi的文档结构和()模式,31,代码示例类是

13、部分-整体层次结构中的所有设备定义一个接口。班级 : (); const char* Name() _name; 瓦特功率();(); (); 无效添加(*);空白 (*); * (); : 平等

14、(const char*); : const char* _name;, Lexi的文档结构和()模式, 32, 代码示例的子类包括代表磁盘驱动器、集成电路和交换机的Leaf类: class : : (const char*); (); 瓦特功率();(); ();,乐

15、xi的文档结构和()模式,33、代码示例是一个包含其他设备的基类,也是一个子类。班级 : : (); 瓦特功率();(); (); 无效添加(*);无效(等式

16、*); * (); : (const char*); :List ;, Lexi 的文档结构和 () 模式, 34, 代码示例的默认实现用于累计子设备的实际价格。: () * i = (); 总计 = 0;对于 (i-First();

17、!i-(); i-Next() 总计 += i-()-(); 一世; total;, Lexi 的文档结构和() 模式, 35, Code 表示为的子类。类: : (const char*); (); 瓦特功率();(); v

18、();,Lexi的文档结构和()模式,36,代码示例采用类似的方式来定义和Bus。这给出了组装个人电脑所需的所有设备,Lexi 的文档结构 与 () 模式一样,37 的代码示例采用了类似的方法来定义和 Bus。这为您提供了组装个人计算机所需的所有设备。* = 新的(PC);* = 新的(PC);-

19、添加();总线* 总线 = 新总线(MCA 总线);bus-Add(new Card(16Mbs Token Ring); -Add(bus); -Add(new (3.5in ); cout () endl, Lexi 的文档结构和 () 模式, 38, 已知应用-相关模式 常与模式一起使用,让你共享组件,但不再引用其父组件,可用于遍历本应分布在和 Leaf 类中的本地化操作和行为,Lexi 的文档结构和 () 模式, 39,谢谢

相关文章

发表评论