




已阅读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年保险中介服务项目建议书
- 2025年抑尘剂项目建议书
- 南京小学5年级数学试卷
- 没有标志的小学数学试卷
- 七下几何题数学试卷
- 去年高考题目数学试卷
- “苏超”现象:文化破圈、城市崛起与青年力量的融合交响-2026年高考语文作文热点话题素材积累与实战训练
- 制作教学课件的完整步骤
- 货运企业安全管理规范
- 物业应急管理办法
- 设备调剂管理办法
- 生活污水管网改造提升工程建议书(模板)
- 蓝天救援队规定管理制度
- 银监会手机租赁管理办法
- 常见上肢骨折护理常规
- 2025建筑安全员考试题库
- 军工领域涉密项目保密风险评估及防控措施
评论
0/150
提交评论