




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解释器模式(Interpreter Pattern) 动机(Motivate): 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。 在这种情况下,将特定领域的问题表达为某种文法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图(Intent): 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。结构图(Struct): 生活中的例子: 适用性:1.当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:2.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达工,这样可以节省空间而且还可能节省时间。3.效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如:正则表达式通常被转换成状态机。但即使在这种情况下,转换器仍可用解释器模式实现,该模式仍是有用的。代码实现:客户端代码如下:1classProgram23staticvoidMain(stringargs)45stringroman=五千四百三十二;/54326Contextcontext=newContext(roman);78/Buildtheparsetree9ArrayListtree=newArrayList();10tree.Add(newOneExpression();11tree.Add(newTenExpression();12tree.Add(newHundredExpression();13tree.Add(newThousandExpression();1415/Interpret16foreach(Expressionexpintree)1718exp.Interpret(context);1920Console.WriteLine(0=1,roman,context.Data);21/Waitforuser22Console.Read();2324创建一个抽象类Expression,来描述共同的操作。1publicabstractclassExpression23protectedDictionarytable=newDictionary(9);4publicExpression()56table.Add(一,1);7table.Add(二,2);8table.Add(三,3);9table.Add(四,4);10table.Add(五,5);11table.Add(六,6);12table.Add(七,7);13table.Add(八,8);14table.Add(九,9);1516publicvirtualvoidInterpret(Contextcontext)1718if(context.Statement.Length=0)1920return;2122foreach(stringkeyintable.Keys)2324intvalue=tablekey;25if(context.Statement.EndsWith(key+GetPostifix()2627context.Data+=value*Multiplier();28context.Statement=context.Statement.Substring(0,context.Statement.Length-this.GetLength();293031if(context.Statement.EndsWith(零)3233context.Statement=context.Statement.Substring(0,context.Statement.Length-1);3435if(context.Statement.Length=0)3637return;3839404142publicabstractstringGetPostifix();43publicabstractintMultiplier();44publicvirtualintGetLength()4546returnthis.GetPostifix().Length+1;4748然后创建一个公共类Context,定义一些全局信息。1publicclassContext23privatestringstatement;4privateintdata;56/Constructor7publicContext(stringstatement)89this.statement=statement;1011/Properties12publicstringStatement1314getreturnstatement;15setstatement=value;1617publicintData1819getreturndata;20setdata=value;21221publicclassOneExpression:Expression23publicoverridestringGetPostifix()45return;67publicoverrideintMultiplier()return1;8publicoverrideintGetLength()910return1;111213publicclassTenExpression:Expression1415publicoverridestringGetPostifix()1617return十;1819publicoverrideintMultiplier()return10;20publicoverrideintGetLength()2122return2;232425publicclassHundredExpression:Expression2627publicoverridestringGetPostifix()2829return百;3031publicoverrideintMultiplier()return100;32publicoverrideintGetLength()3334return2;353637publicclassThousandExpression:Expression3839publicoverridestringGetPostifix()4041return千;4243publicoverrideintMultiplier()return1000;44publicoverrideintGetLength()4546return2;4748Interpreter实现要点: Interpreter模式的应用场合是interpreter模式应用中的难点,只有满足业务规则频繁变化,且类似的模式不断重复出现,并且容易抽象为语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年冷链物流行业冷链管理与食品安全保障研究报告
- 校园生命安全培训总结课件
- 2025年金融行业数字货币支付模式探索报告
- 2025年高龄老年人多重慢性病综合治疗模拟答案及解析
- 2025年康复医学知识应用能力挑战模拟考试卷答案及解析
- 2025甘肃国际物流平凉有限公司员工招聘1人笔试参考题库附答案解析
- 2025年肿瘤科肿瘤治疗方案制定模拟测验答案及解析
- 2025年外科学科的智齿拔除手术护理操作模拟考试试卷答案及解析
- 2026兴业银行深圳分行秋季校园招聘笔试备考题库及答案解析
- 2025年体育医学专业运动损伤处理技巧考核模拟试卷答案及解析
- 银行解冻申请书
- 基于学科核心素养下的教学设计
- 人教版英语七年级(全册)单词表
- 全心衰竭的治疗与护理
- 扩张型心肌病治疗及护理
- 森林抚育作业设计
- 2002版干部履历表(贵州省)
- DL∕T 1396-2014 水电建设项目文件收集与档案整 理规范
- 行路难课件8省公开课一等奖新名师比赛一等奖课件
- 防欺凌隐患排查和矛盾化解记录表
- 建设单位给施工单位的通知函范本
评论
0/150
提交评论