![[23种设计模式汇总]行为型模式_解释器模式.doc_第1页](http://file.renrendoc.com/FileRoot1/2020-1/14/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e1.gif)
![[23种设计模式汇总]行为型模式_解释器模式.doc_第2页](http://file.renrendoc.com/FileRoot1/2020-1/14/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e2.gif)
![[23种设计模式汇总]行为型模式_解释器模式.doc_第3页](http://file.renrendoc.com/FileRoot1/2020-1/14/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e3.gif)
![[23种设计模式汇总]行为型模式_解释器模式.doc_第4页](http://file.renrendoc.com/FileRoot1/2020-1/14/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e4.gif)
![[23种设计模式汇总]行为型模式_解释器模式.doc_第5页](http://file.renrendoc.com/FileRoot1/2020-1/14/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e/4c7fef50-b24c-40cd-aac8-3e2e7c90db0e5.gif)
已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
解释器模式动机(Motivate):在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种文法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图(Intent):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。结构图(Struct):生活中的例子:适用性:1.当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式。而当存在以下情况时该模式效果最好:2.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达工,这样可以节省空间而且还可能节省时间。3.效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如:正则表达式通常被转换成状态机。但即使在这种情况下,转换器仍可用解释器模式实现,该模式仍是有用的。代码实现:客户端代码如下:1 class Program2 3 static void Main(string args)4 5 string roman = 五千四百三十二; /54326 Context context = new Context(roman);7 8 /Build the parse tree9 ArrayList tree = new ArrayList();10 tree.Add(new OneExpression();11 tree.Add(new TenExpression();12 tree.Add(new HundredExpression();13 tree.Add(new ThousandExpression(); 14 15 /Interpret16 foreach (Expression exp in tree)17 18 exp.Interpret(context);19 20 Console.WriteLine(0 = 1, roman, context.Data);21 /Wait for user22 Console.Read();23 24 创建一个抽象类Expression,来描述共同的操作。1 public abstract class Expression2 3 protected Dictionary table = new Dictionary(9);4 public Expression()5 6 table.Add(一, 1);7 table.Add(二, 2);8 table.Add(三, 3);9 table.Add(四, 4);10 table.Add(五, 5);11 table.Add(六, 6);12 table.Add(七, 7);13 table.Add(八, 8);14 table.Add(九, 9);15 16 public virtual void Interpret(Context context)17 18 if(context.Statement.Length=0)19 20 return;21 22 foreach(string key in table.Keys)23 24 int value=tablekey;25 if(context.Statement.EndsWith(key + GetPostifix()26 27 context.Data +=value*Multiplier();28 context.Statement = context.Statement.Substring(0,context.Statement.Length- this.GetLength();29 30 31 if(context.Statement.EndsWith(零)32 33 context.Statement = context.Statement.Substring(0, context.Statement.Length - 1);34 35 if (context.Statement.Length = 0)36 37 return;38 39 40 41 42 public abstract string GetPostifix();43 public abstract int Multiplier();44 public virtual int GetLength()45 46 return this.GetPostifix().Length + 1;47 48 然后创建一个公共类Context,定义一些全局信息。1 public class Context2 3 private string statement;4 private int data;5 6 /Constructor7 public Context(string statement)8 9 this.statement = statement;10 11 /Properties12 public string Statement13 14 get return statement; 15 set statement = value; 16 17 public int Data18 19 get return data; 20 set data = value; 21 22 1 public class OneExpression : Expression2 3 public override string GetPostifix()4 5 return ;6 7 public override int Multiplier() return 1; 8 public override int GetLength()9 10 return 1;11 12 13 public class TenExpression : Expression14 15 public override string GetPostifix()16 17 return 十;18 19 public override int Multiplier() return 10; 20 public override int GetLength()21 22 return 2;23 24 25 public class HundredExpression : Expression26 27 public override string GetPostifix()28 29 return 百;30 31 public override int Multiplier() return 100; 32 public override int GetLength()33 34 return 2;35 36 37 public class ThousandExpression : Expression38 39 public override string GetPostifix()40 41 return 千;42 43 public override int Multiplier() return 1000; 44 public override int GetLength()45 46 return 2;47 48 Interpreter实现要点:Interpreter模式的应用场合是interpreter模式应用中的难点,只有满足业务规则频繁变化,且类似的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 举办心理咨询方案培训
- 中高考营销方案
- 临沂铁路隔音屏施工方案
- 仙桃中2025考试卷及答案
- 2025湖南湘西自治州古丈县教育类事业单位引进高层次急需紧缺人才6人模拟试卷及答案详解(夺冠系列)
- 2025二模政治试卷及答案
- 2025年初一数学竞赛试题及答案
- 2025年职高数学竞赛试卷及答案
- 2025年初级裁判考试试题及答案
- 2025福建厦门市思明区嘉莲街道办事处招聘非在编工作人员2人模拟试卷及答案详解(夺冠系列)
- 战火勋章答题题库及答案
- 流延膜设备安全操作培训课件
- 医学基础期末试题及答案
- 2025年放射诊疗培训试题及答案
- (零模)苏州市2026届高三年级期初阳光调研试卷 历史试卷(含答案)
- 九年级英语上学期第一次月考(广东卷)(原卷版)
- 码头生产调度管理办法
- 智能巡查机器人系统设计
- 3.2营造清朗空间教学设计 2025-2026学年统编版道德与法治八年级上册
- 教科版物理八年级上册《2.光的反射定律》听评课记录2
- (2025年标准)学生癫痫免责协议书
评论
0/150
提交评论