[23种设计模式汇总]行为型模式_解释器模式

[23种设计模式汇总]行为型模式_解释器模式

ID:40313995

大小:85.50 KB

页数:6页

时间:2019-07-30

[23种设计模式汇总]行为型模式_解释器模式_第1页
[23种设计模式汇总]行为型模式_解释器模式_第2页
[23种设计模式汇总]行为型模式_解释器模式_第3页
[23种设计模式汇总]行为型模式_解释器模式_第4页
[23种设计模式汇总]行为型模式_解释器模式_第5页
资源描述:

《[23种设计模式汇总]行为型模式_解释器模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、解释器模式动机(Motivate):    在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。    在这种情况下,将特定领域的问题表达为某种文法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图(Intent):    给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。结构图(Struct):            生活中的例子:             适用性:1.当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可

2、使用解释器模式。而当存在以下情况时该模式效果最好:2.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。此时语法分析程序生成器这样的工具是更好的选择。它们无需构建抽象语法树即可解释表达工,这样可以节省空间而且还可能节省时间。3.效率不是一个关键问题最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。例如:正则表达式通常被转换成状态机。但即使在这种情况下,转换器仍可用解释器模式实现,该模式仍是有用的。代码实现:客户端代码如下:1classProgram2{3staticvoidMain(string[]args)4{5stringroman="五千四百

3、三十二";//54326Contextcontext=newContext(roman);78//Buildthe'parsetree'9ArrayListtree=newArrayList();10tree.Add(newOneExpression());11tree.Add(newTenExpression());12tree.Add(newHundredExpression());13tree.Add(newThousandExpression());1415//Interpret16foreach(Expressionexpintree)17{18exp.Interpret(con

4、text);19}20Console.WriteLine("{0}={1}",roman,context.Data);21//Waitforuser22Console.Read();23}24}创建一个抽象类Expression,来描述共同的操作。1publicabstractclassExpression2{3protectedDictionarytable=newDictionary(9);4publicExpression()5{6table.Add("一",1);7table.Add("二",2);8table.Add("三",3);

5、9table.Add("四",4);10table.Add("五",5);11table.Add("六",6);12table.Add("七",7);13table.Add("八",8);14table.Add("九",9);15}16publicvirtualvoidInterpret(Contextcontext)17{18if(context.Statement.Length==0)19{20return;21}22foreach(stringkeyintable.Keys)23{24intvalue=table[key];25if(context.Statement.EndsWit

6、h(key+GetPostifix()))26{27context.Data+=value*Multiplier();28context.Statement=context.Statement.Substring(0,context.Statement.Length-this.GetLength());29}3031if(context.Statement.EndsWith("零"))32{33context.Statement=context.Statement.Substring(0,context.Statement.Length-1);34}35if(context.Stateme

7、nt.Length==0)36{37return;38}39}40}4142publicabstractstringGetPostifix();43publicabstractintMultiplier();44publicvirtualintGetLength()45{46returnthis.GetPostifix().Length+1;47}48}然后创建一个公共类Context,定义一些全局信息。1publicc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。