![[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年广西中烟工业有限责任公司招聘考试笔试试题(含答案)
- 2025年佛山市禅城区南庄镇堤田小学招聘教师考试笔试试题(含答案)
- 2025建筑工地材料储存库建设合同
- 2025年医疗机构手卫生规范考试试题及答案
- 北京消防知识培训课件
- 北京汽车知识培训课件
- 2025抗菌药物培训试题库及答案
- 2025年安全员安全生产知识竞赛抢答题库及答案
- 2024年全国“汽油加氢装置操作工”技能及理论知识考试题库与答案
- 临床技术操作规范与诊疗指南
- 私有云平台搭建项目实施方案
- DB43-T 3111-2024分布式光伏接入配电网技术导则改
- 《高速公路边坡光伏交通安全性评价方法》
- 电力生产典型事故案例汇编
- DB32-T 4174-2021 城市居住区和单位绿化标准
- 2024卫浴行业白皮书-巨量引擎-202412
- 山东省潍坊市2024-2025学年高一上学期期中考试数学试题
- 《山东省建筑工程消耗量定额》解释全集
- 宠物脂肪肝的诊断与治疗
- 便利店安全管理实施方案
评论
0/150
提交评论