北风设计模式课程---解释器模式(Interpreter Pattern)
北风设计模式课程---解释器模式(Interpreter Pattern)
一、总结
一句话总结:
不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例
设计模式都是对生活的抽象,比如用户获得装备,我可以先装备工厂先生产出来装备,然后给宗门武器库,宗门武器库发给我,如果是打怪获得的装备,可以是装备工厂把装备给的怪物装备库
1、解释器模式的应用场景?
面向对象语言开发的编译器中:解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中。
某一特定类型的问题发生的频率很高:如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句
2、解释器模式 定义?
定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”意思是使用规定格式和语法的代码,它是一种类行为型模式。
3、抽象语法树 是什么?
表达式二叉树:除了使用文法规则来定义一个语言,在解释器模式中还可以通过一种称之为抽象语法树(Abstract Syntax Tree, AST)的图形方式来直观地表示语言的构成,每一棵抽象语法树对应一个语言实例。
二、深入浅出设计模式——解释器模式(Interpreter Pattern)
转自或参考:深入浅出设计模式——解释器模式(Interpreter Pattern)
https://www.cnblogs.com/Bobby0322/p/4195555.html
模式动机
如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题。
解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中。
模式定义
解释器模式(Interpreter Pattern) :定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”意思是使用规定格式和语法的代码,它是一种类行为型模式。
Interpreter Pattern: Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.
Frequency of use: low
UML图
模式结构
解释器模式包含如下角色:
AbstractExpression: 抽象表达式
TerminalExpression: 终结符表达式
NonterminalExpression: 非终结符表达式
Context: 环境类
Client: 客户类
模式分析
解释器模式描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。
文法规则实例:
expression ::= value | symbol
symbol ::= expression '+' expression | expression '-' expression
value ::= an integer //一个整数值
在文法规则定义中可以使用一些符号来表示不同的含义,如使用“|”表示或,使用“{”和“}”表示组合,使用“*”表示出现0次或多次等,其中使用频率最高的符号是表示或关系的“|” 。
抽象语法树:
除了使用文法规则来定义一个语言,在解释器模式中还可以通过一种称之为抽象语法树(Abstract Syntax Tree, AST)的图形方式来直观地表示语言的构成,每一棵抽象语法树对应一个语言实例。
抽象语法树描述了如何构成一个复杂的句子,通过对抽象语法树的分析,可以识别出语言中的终结符和非终结符类。
在解释器模式中,每一种终结符和非终结符都有一个具体类与之对应,正因为使用类来表示每一个语法规则,使得系统具有较好的扩展性和灵活性。
模式实例与解析
以中英文翻译系统为例来介绍解释器模式
体系结构
AbstractExpression接口 IExpression.cs
using System.Text;namespace InterpreterPattern {//定义AbstractExpression接口interface IExpression{void Interpret(StringBuilder sb);} }
具体的Expression WordExpression.cs
using System.Text;namespace InterpreterPattern {//定义具体的Expression,这里包括对英文单词的翻译和对英文句号的翻译。public class WordExpression : IExpression{private string _value;public WordExpression(string value){_value = value;}public void Interpret(StringBuilder sb){sb.Append(ChineseEnglishDict.GetEnglish(_value.ToLower()));}} }
SymbolExpression.cs
using System.Text;namespace InterpreterPattern {//对英文句号的翻译public class SymbolExpression : IExpression{private string _value;public SymbolExpression(string value){this._value = value;}public void Interpret(StringBuilder sb){switch (_value){case ".":sb.Append("。");break;}}} }
Context: 环境类 ChineseEnglishDict.cs
using System.Collections.Generic;namespace InterpreterPattern {public static class ChineseEnglishDict{private static Dictionary<string, string> _dictory = new Dictionary<string, string>();static ChineseEnglishDict(){_dictory.Add("this", "这");_dictory.Add("is", "是");_dictory.Add("an", "一个");_dictory.Add("apple", "苹果");}public static string GetEnglish(string value){return _dictory[value];}} }
将各部分解释器组合起来进行包装,方便用户调用 Translator.cs
using System; using System.Collections.Generic; using System.Text;namespace InterpreterPattern {//将各部分解释器组合起来进行包装,方便用户调用。public static class Translator{public static string Translate(string sentense){StringBuilder sb = new StringBuilder();List<IExpression> expressions = new List<IExpression>();string[] elements = sentense.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);foreach (string element in elements){string[] words = element.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);foreach (string word in words){expressions.Add(new WordExpression(word));}expressions.Add(new SymbolExpression("."));}foreach (IExpression expression in expressions){expression.Interpret(sb);} return sb.ToString();}} }
Client:客户类
using System;namespace InterpreterPattern {class Program{static void Main(string[] args){string englist = "This is an apple.";string chinese = Translator.Translate(englist);Console.WriteLine(chinese);Console.Read();}} }
模式优缺点
解释器模式的优点
易于改变和扩展文法。
易于实现文法。
增加了新的解释表达式的方式。
解释器模式的缺点
对于复杂文法难以维护。
执行效率较低。
应用场景很有限。
模式适用环境
在以下情况下可以使用解释器模式:
可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
一些重复出现的问题可以用一种简单的语言来进行表达。
文法较为简单。
效率不是关键问题。
【声明与感谢】
本文,站在许多巨人的肩膀上,借鉴和引用了许多他人拥有版权的作品或著述,在此,对前人们的贡献致谢。并同时公布引用的内容、原作者或来源(一些来源于互联网的内容本人无法追述本源,深表遗憾)。
【参考文献】
《设计模式—可复用面向对象软件的基础》作者: [美] Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides 译者: 李英军 / 马晓星 / 蔡敏 / 刘建中 等 机械工业出版社
《重构—改善既有代码的设计》作者: Martin Fowler译者:候捷 中国电力出版社
《敏捷软件开发—原则、模式与实践》作者: Robert C. Martin 清华大学出版社
《程序员修炼之道—从小工到专家》作者: Andrew Hunt / David Thomas 电子工业出版社
《Head First 设计模式》作者: 弗里曼 译者: O'Reilly Taiwan公司 中国电力出版社
《设计模式之禅》 作者: 秦小波 机械工业出版社
MSDN WebCast 《C#面向对象设计模式纵横谈》 讲师:李建忠
刘伟. 设计模式. 北京:清华大学出版社, 2011.
刘伟. 设计模式实训教程. 北京:清华大学出版社, 2012.
《大话设计模式》 作者: 程杰 清华大学出版社
《C#图解教程》作者: 索利斯 译者: 苏林 / 朱晔 人民邮电出版社
《你必须知道的.NET》作者: 王涛
《项目中的.NET》作者: 李天平 电子工业出版社
《Microsoft .NET企业级应用架构设计》作者: (美)埃斯波西托等编著 译者: 陈黎夫
http://www.dofactory.com/Patterns/Patterns.aspx .NET Design Patterns
http://www.cnblogs.com/zhenyulu 博客作者:吕震宇
http://www.cnblogs.com/terrylee 博客作者:李会军
http://www.cnblogs.com/anlyren/ 博客作者:anlyren
http://www.cnblogs.com/idior 博客作者:idior
http://www.cnblogs.com/allenlooplee 博客作者:Allen lee
http://blog.csdn.net/ai92 博客作者:ai92
http://www.cnblogs.com/umlonline/ 博客作者:张传波
http://www.cnblogs.com/lovecherry/ 博客作者:LoveCherry
转载于:https://www.cnblogs.com/Renyi-Fan/p/11033159.html
北风设计模式课程---解释器模式(Interpreter Pattern)相关推荐
- 北风设计模式课程---创建模式、结构模式、行为模式的区别
北风设计模式课程---创建模式.结构模式.行为模式的区别 一.总结 一句话总结: 创建模式:[关注对象的创建]:创建型模式,就是创建对象的模式,抽象了实例化的过程. 结构模式:结构型模式是为解决[怎样 ...
- 北风设计模式课程---访问者模式(Visitor)
北风设计模式课程---访问者模式(Visitor) 一.总结 一句话总结: 设计模式是日常问题的经验总结方案,所以学好设计模式对日常出现的问题可以有很好的解决. 访问者设计模式有点神似 抽象工厂模式, ...
- 设计模式之解释器模式(Interpreter)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 35解释器模式(Interpreter Pattern)
动机(Motivate): 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化. 在这种情况下,将特定领域的问题 ...
- 行为型设计模式之解释器模式(Interpreter)
结构 意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 适用性 当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用 ...
- 设计模式 笔记 解释器模式 Interpreter
//---------------------------15/04/26---------------------------- //Interpreter 解释器模式----类行为型模式 /* 1 ...
- 设计模式之---解释器模式
解释器模式概述 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器.在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的 ...
- 北风设计模式课程---深入理解[代理模式]原理与技术
北风设计模式课程---深入理解[代理模式]原理与技术 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装 ...
- 北风设计模式课程---7、建造者模式
北风设计模式课程---7.建造者模式 一.总结 一句话总结: 设计模式都是对生活中好的做事方法的一些抽象,使得各司其职,减少出错. 建造者模式可以看做模仿的生活中:设计师,施工队做复杂房子交给客户的场 ...
最新文章
- 域控制器安装过程中断电!与Windows Server 2008 林功能级别提升之“冬夜”分享...
- Python 安装cx_Oracle模块折腾笔记
- python教程书籍-推荐python机器学习实践的书籍?
- 实验七多线程编程_JAVA
- stm32IAP代码升级小结
- SAP One Order redesign里的新CDS view
- 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优
- 美图影像节发布六款新品 满足用户生活、工作全方位变美需求
- 2010年3月再谈前端工程师的笔试题
- lr 远程压力机部署安装
- paip.提升用户体验---显示密码控件ShowPwdController
- 程序员浪漫表白小程序
- 2台路由器串联接法(有线路由+无线路由)
- [附源码]Java计算机毕业设计SSM大学生运动员健康管理系统
- oracle direct path read temp,direct path read/read temp等待事件
- 华为麦芒7上的360手机助手无法卸载
- Spring 揭秘之Spring AOP一世(2)织入实现
- 0基础学习——了解操作符的那些事(一)
- Java中调用C++代码
- A类、B类、C类和D类期刊
热门文章
- AI上推荐 之 基于内容的推荐(ContentBasedRecommend)
- MATLAB app designer/GUI清除工作区(workspace)的用法
- gcc编译动态库的时候提示 error adding symbols: 错误的值
- 【JVM系列】读懂Java虚拟机(JVM)这一篇就够了!
- C++语言学习之判断出三角形的类型
- luogu P6476 [NOI Online 2 提高组]涂色游戏color
- Rockland重组 scFv 抗人 CD45 抗体说明书
- 毕业论文内容框架指导(程序设计类)
- vue + xlsx 动态生成Excel,合并单元格
- python狗品种识别_狗品种识别