《精编》通信行业行为模式介绍

上传人:tang****xu2 文档编号:133593909 上传时间:2020-05-28 格式:PPT 页数:253 大小:3.02MB
返回 下载 相关 举报
《精编》通信行业行为模式介绍_第1页
第1页 / 共253页
《精编》通信行业行为模式介绍_第2页
第2页 / 共253页
《精编》通信行业行为模式介绍_第3页
第3页 / 共253页
《精编》通信行业行为模式介绍_第4页
第4页 / 共253页
《精编》通信行业行为模式介绍_第5页
第5页 / 共253页
点击查看更多>>
资源描述

《《精编》通信行业行为模式介绍》由会员分享,可在线阅读,更多相关《《精编》通信行业行为模式介绍(253页珍藏版)》请在金锄头文库上搜索。

1、行为模式 行为模式 行为模式涉及到算法和对象间职责的分配描述对象或类的模式描述它们之间的通信模式 行为类模式 使用继承机制在类间分派行为TemplateMethod模板方法是一个算法的抽象定义子类定义抽象操作以具体实现该算法Interpreter将一个文法表示为一个类层次 行为对象模式 使用对象复合类型1 描述一组对等的对象怎样相互协作问题 对等的对象如何了解对方 MediatorChainofResponsibilityObserver 行为对象模式 类型2将行为封装在一个对象中并将请求指派给它StrategyCommandStateVisitor 5 1ChainofResponsibil

2、ity职责链 1 意图 使多个对象都有机会处理请求 从而避免请求的发送者和接收者之间的耦合关系将这些对象连成一条链 并沿着这条链传递该请求 直到有一个对象处理它为止 2 动机 图形用户界面中的Context有关的帮助机制根据普遍性 generality 组织帮助信息从最特殊到最普通提交请求的对象不知道谁是最终提供响应的对象使用ChainofResponsibility模式 使得请求者和响应者解耦 decouple 2 动机 隐式的接收者 implicitreceiver 2 动机 3 适用性 有多个对象可以处理一个请求哪个对象处理该请求 由运行时刻自动确定在不明确接收者的情况下 向多个对象中的

3、一个提交一个请求可处理一个请求的对象集合应被动态指定 4 结构 5 参与者 Handler HelpHandler 定义一个处理请求的接口 可选 实现后继链ConcreteHandler PrintButton PrintDialog 处理它所负责的请求可访问它的后继者如果可处理请求 则处理 否则将请求转发给它的后继者Client向链上的具体处理者 ConcreteHandler 对象提交请求 9 协作 当客户提交一个请求时 请求沿链传递直至有一个ConcreteHandler对象负责处理它 7 效果 1 降低耦合度接收者和发送者都没有对象的明确信息 且链中的对象不需知道链的结构职责链可简化对

4、象的相互连接仅需保持一个指向后继者的引用不需保持所有候选接受者的引用 7 效果 2 增强了给对象指派职责 Responsibility 的灵活性在运行时刻对职责链进行动态增加和修改3 不保证被接受一个请求 不能保证它一定会被处理 8 实现 1 实现后继者链a 定义新的链接e g 使用Handler类 b 使用已有的链接e g 复用Composite模式中的链等 8 实现 2 连接后继者 Handler不仅定义请求的接口 也维护后继链接 8 实现 3 表示请求方式1 硬编码 hard coded 的操作调用方便 安全 只能处理Handler类中定义的固定的一组请求方式2 使用一个处理函数处理函数

5、以一个请求码为参数优点 更为灵活缺点 无法用类型安全的方法传递请求参数 8 实现 用独立的请求对象来封装请求参数 8 实现 子类扩展 9 代码示例 HelpHandler类 检索是否存在相关的帮助主题 9 代码示例 窗口组件类Widget 9 代码示例 Button类 9 代码示例 Dialog类 9 代码示例 Application类 9 代码示例 Client 11 相关模式 职责链常与Composite模式一起使用一个组件的父组件可作为它的后继 5 2Command命令 Command模式 1 意图将一个请求封装为一个对象 从而可用不同的请求对客户进行参数化对请求排队或记录请求日志 以及

6、支持可撤销的操作2 别名动作 Action 事务 Transaction 3 动机 有时必须向某对象提交请求 但并不知道被请求的操作或者请求的接受者的信息 应用为每个菜单项配置一个Command对象 3 动机 PasteCommand对象 3 动机 OpenCommand 3 动机 宏命令 命令序列 3 动机 菜单和按钮代表同一功能共享Command对象命令脚本 commandscripting 提交一个请求的对象仅需知道如何提交它不需知道该请求将会被如何执行 4 适用性 抽象出待执行的动作以参数化某对象callback在不同的时刻指定 排列和执行请求支持取消操作支持修改日志用构建在原语操作上

7、的高层操作构造一个系统Transaction事务 5 结构 6 参与者 Command声明执行操作的接口ConcreteCommand PasteCommand OpenCommand 将一个接收者对象绑定于一个动作调用接收者相应的操作 以实现ExecuteClient Application 创建一个具体命令对象并设定它的接收者Invoker MenuItem 要求该命令执行这个请求Receiver Document Application 知道如何实施与执行一个请求相关的操作任何类都可能作为一个请求者 7 协作 8 效果 将调用操作的对象 Invoker 与知道如何实现该操作的对象 Rec

8、eiver 解耦Command可以像其他对象一样操作以及扩展多个命令装配成一个复合命令Composite模式增加新的Command很容易 无需改变已有的类 9 实现 1 一个Command对象应达到何种智能程度命令对象的能力可大可小仅确定一个接收者和执行的动作或Command对象自己实现所有功能 不需要额外的接收者对象普通情况 Command对象有足够的信息可以动态找到它们的接收者 9 实现 2 支持取消 undo 和重做 redo Command提供reverse操作 Unexecute或者Undo操作 此时 ConcreteCommand类需要额外的状态信息接收者对象 其上执行的操作接收者

9、上执行操作的参数如果该操作改变了接收者对象的值 则需要存储这些值接收者需要提供操作 以便恢复到先前状态 9 实现 2 支持取消 undo 和重做 redo 已执行命令的历史序列 historylist 向后遍历 undo向前遍历 redo如果命令的状态在各次调用之间会发生变化 则必须进行拷贝以区分不同调用e g DeleteCommand命令对象 9 实现 3 避免取消操作过程中的错误积累在Command中存入更多的信息以保证这些对象被精确复原成其初始状态Memento模式4 使用C 模板对 1 不能撤销 2 不需要参数的命令 可使用C 模板来实现 10 代码示例 抽象Command类 10

10、代码示例 OpenCommand 10 代码示例 PasteCommand 10 代码示例 使用类模板处理简单命令 不能取消 不需参数 10 代码示例 MacroCommand 子命令序列 管理子命令 12 相关模式 Composite模式 用于实现宏命令Memento模式用来保存某个状态 Command对象使用此状态来实现撤销操作在被放入历史列表前必须被拷贝的Command起到原型 prototype 的作用 5 3Interpreter解释器 1 意图 给定一个语言 定义它的文法的一种表示定义一个解释器 这个解释器使用该表示来解释语言中的句子 2 动机 字符串模式匹配解释执行一个正则表达式

11、解释器模式描述了如何为简单的语言定义一个文法如何在该语言中表示一个句子如何解释这些句子 2 动机 正则表达式 2 动机 2 动机 抽象语法树raining dogs cats 3 适用性 该文法简单对于复杂的文法 需要使用语法分析程序生成器之类的效率不是一个关键问题 4 结构图 5 参与者 AbstractExpression 抽象表达式 声明一个抽象的解释操作 这个接口被抽象语法树中所有的节点共享TerminalExpression 终结符表达式 实现与文法中的终结符相关联的解释操作一个句子中的每个终结符需要该类的一个实例NonterminalExpression 非终结符表达式 针对文法中

12、的规则Context上下文包含解释器之外的一些全局信息Client构建抽象语法树调用解释操作 6 协作 Client构建 或被给定 一个句子它是NonterminalExpression和TerminalExpression对象的一个抽象语法树然后初始化上下文并调用解释操作每一非终结符节点定义相应子表达式的解释操作 终结符节点的解释操作是递归的基础每一节点的 解释操作 作用Context来存储和访问解释器的状态 7 效果 1 易于改变和扩展文法使用继承来改变或扩展文法2 易于实现文法易于编写抽象语法树中各个节点对应的类也可用编译器或语法分析程序生成器自动生成 7 效果 3 复杂的文法难以维护解

13、释器模式中 每个规则至少定义一个类4 增加了新的解释表达式的方式AbstractExpression上除了Interpret操作外 可以增加新的操作可以考虑Visitor模式 8 实现 1 创建抽象语法树解释器模式不涉及语法分析未解释如何创建一个抽象语法树可行的方式用一个表驱动的语法分析程序来生成用手写的 递归下降法 语法分析程序创建直接由Client提供 8 实现 2 定义解释操作不一定要在表达式类中定义解释操作可使用Visitor模式3 以Flyweight模式共享终结符 9 代码示例 对布尔表达式进行操作和求值 两个操作 求值替换 replace 用一个表达式来替换一个变量以产生新的表达

14、式 9 代码示例 父类 上下文 9 代码示例 变量 替换 9 代码示例 And操作 求值 9 代码示例 And操作 9 代码示例 求值 9 代码示例 替换 11 相关模式 Composite模式抽象语法树是复合模式的实例Flyweight模式如何在抽象语法树中共享终结符Iterator解释器用一个迭代器进行遍历Visitor将解释操作独立出来 5 4Iterator迭代器 Iterator模式 1 意图提供一种方法顺序访问一个聚合对象中各个元素不需暴露该对象的内部表示2 别名游标 Cursor 3 动机 将 对列表的访问和遍历 从列表对象中分离出来 此时 迭代器和列表耦合 3 动机 多态迭代

15、polymorphiciteration FactoryMethod 4 适用性 访问一个聚合对象的内容而无需暴露它的内部表示支持对聚合对象的多种遍历为遍历不同的聚合结构提供一个统一的接口 即 支持多态迭代 5 结构 6 参与者 Iterator定义访问和遍历元素的接口ConcreteIterator实现Iterator接口对聚合对象遍历时追踪当前位置Aggregate定义创建相应Iterator对象的接口 CreateIterator ConcreteAggregate实现Aggregate接口CreateIterator操作返回一个适当的Iterator实例 7 协作 ConcreteIt

16、erator跟踪聚合中的当前对象 并能够计算出待遍历的后继对象 8 效果 1 支持以不同的方式遍历一个聚合更换迭代器实例即可处理不同的遍历算法2 迭代器简化了聚合的接口聚合本身不需提供遍历接口3 在同一个聚合上可以有多个遍历每个迭代器保持它自己的遍历状态 9 实现 1 谁控制该迭代迭代器orclient 外部迭代器 externaliterator client控制Client需要主动推进遍历的步伐 next 使用灵活内部迭代器 internaliterator 迭代器控制Client向iterator提交一个操作 迭代器对聚合中每个元素实施该操作使用简单 client不需考虑迭代逻辑 9 实现 2 谁定义遍历算法迭代器or聚合聚合中定义遍历算法用迭代器存储当前迭代的状态此时迭代器仅用来只是当前位置 称为 游标 Cursor迭代器负责遍历算法优点 易于在相同聚合上使用不同的迭代算法 或在不同的聚合上重用相同的算法缺点 遍历算法可能需要访问聚合的私有变量 因此将遍历算法放入迭代器可能会破坏聚合的封装性 9 实现 3 迭代器健壮程度如何遍历的同时存在修改 增加或删除聚合元素 可能导致遍历出

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号