- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * 4.2 COMMAND(命令) 5. 结构 6. 参与者 ? C o m m a n d — 声明执行操作的接口。 ? C o n c r e t e C o m m a n d ( P a s t e C o m m a n d,O p e n C o m m a n d ) — 将一个接收者对象绑定于一个动作。 — 调用接收者相应的操作,以实现 E x e c u t e。 ? C l i e n t ( A p p l i c t i o n ) — 创建一个具体命令对象并设定它的接收者。 ? Invoker ( M e n u I t e m ) — 要求该命令执行这个请求。 ? R e c e i v e r ( D o c u m e n t,A p p l i c a t i o n ) — 知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 4.2 COMMAND(命令) 7. 协作 ? Client创建一个ConcreteCommand对象并指定它的Receiver对象。 ? 某Invoker对象存储该 ConcreteCommand对象。 ? 该Invoker通过调用Command对象的Execute操作来提交一个请求。若该命令是可撤消的, ConcreteCommand就在执行Excute操作之前存储当前状态以用于取消该命令。 ? ConcreteCommand对象对调用它的Receiver的一些操作以执行该请求。 4.2 COMMAND(命令) 作业 有如下实验: 1。准备浓度10%的盐水100g。 2。对该盐水按照1g为单位添加食盐,计算达到饱和浓度时所需的食盐量。 请用Command模式实现该实验。(MakeSaltWaterCommand类和AddSaltCommand类) 4.3 INTERPRETER(解释器) 1. 意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 2. 动机 如果一种特定类型的问题发生的频率足够高 , 那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器 , 该解释器通过解释这些句子来解决该问题。 句子1 句子2 句子3 与字符匹配有关的语言 解释器 回忆一下离散数学 中的基数概念 4.3 INTERPRETER(解释器) 问题: 选择(或定义)什么样的语言?(定义语言的文法) 怎么表达句子?(包括在我们的字符串匹配里面) 解释器应该是什么样的?怎么解释每一个句子? 句子1 句子2 句子3 与字符匹配有关的语言 解释器 4.3 INTERPRETER(解释器) 与其为每一个的模式都构造一个特定的算法,不如使用一种通用的搜索算法来 解释执行一个正则表达式,该正则表达式定义了待匹配字符串的集合。 解释器模式描述了: 1.如何为简单的语言定义一个文法 2.如何在该语言中表示一个句子 3.如何解释这些句子 下面我们要描述如何为正则表达式定义一个文法 , 如何表示一个特定的正则表达式 , 以及如何解释这个正则表达式。 4.3 INTERPRETER(解释器) 1).解释器模式使用类来表示每一条文法规则。在规则右边的符号是这些类的实例变量.上面的文法用五个类表示 : 一个抽象类RegularExpression和它四个子类 LiteralExpression、AlternationExpression、SequenceExpression和RepetitionExpression后三个类定义的变量代表子表达式。 4.3 INTERPRETER(解释器) 2).每个用这个文法定义的正则表达式(每一个句子)都被表示为一个由这些类的实例构成的抽象语法树。 例如, 抽象语法树: 句子在哪里? 句子就是一个个正则表达式。 本例子 表示正则表达式: raining (dogs | cats) * 4.3 INTERPRETER(解释器) 3).如果我们为 RegularExpression的每一子类都定义解释 ( Interpret )操作,那么就得到了为这些正则表达式的一个解释器。解释器将该表达式的上下文做为一个参数。 上下文包含输入字符串和关于目前它已有多少已经被匹配等信息。为匹配输入字符串的下一部分,每一RegularExpression的子类都在当前上下文的基础上实现解
文档评论(0)