[设计模式-行为型]解释器模式(Interpreter)
一句话
看起来是用来解释一种语言的文法。(类似不同的解释器子类解释不同的字符)
和编译器类似的解释器, 实际状况可能使用的比较少。
概括
解析
INTERPRETER—俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只要做一个Interpreter,照着上面的脚本执行就可以了。
解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的任何排列组合都是一个语言。
实例
包含的文件有:
一个解释器的抽象类 (Expression.java)
一个上下文的类, 这个上下文类中有解释器类的列表(Context.java)
两个解释器的子类(Type1Expression.java ; Type2Expression.java)
通过不同的解释器,把相应的语言做一些转换。
测试类 TestMain.java
/** * @author oscar999 * @date 2015-1-6* @version V1.0 */
package designptn.interpreter;public abstract class Expression {abstract void interpret(Context ctx);
}
/** * @author oscar999 * @date 2015-1-6* @version V1.0 */
package designptn.interpreter;import java.util.ArrayList;
import java.util.List;public class Context {private String context;private List<Expression> list = new ArrayList<Expression>();public void setContent(String content) {this.context = content;}public String getContent() {return this.context;}public void add(Expression eps) {list.add(eps);}public List<Expression> getList() {return list;}
}
/** * @author oscar999 * @date 2015-1-6* @version V1.0 */
package designptn.interpreter;public class Type1Expression extends Expression {void interpret(Context ctx) {// TODO Auto-generated method stubSystem.out.println("Interpret Type1 content!");}}
/** * @author oscar999 * @date 2015-1-6* @version V1.0 */
package designptn.interpreter;public class Type2Expression extends Expression {void interpret(Context ctx) {// TODO Auto-generated method stubSystem.out.println("Interpret Type2 content!");}}
/** * @author oscar999 * @date 2015-1-6* @version V1.0 */
package designptn.interpreter;/*** @author Administrator**/
public class TestMain {public static void main(String[] args) {// TODO Auto-generated method stubContext ctx = new Context();ctx.add(new Type1Expression());ctx.add(new Type2Expression());for(Expression eps : ctx.getList()){eps.interpret(ctx);}}}
[设计模式-行为型]解释器模式(Interpreter)相关推荐
- 设计模式之15 - 解释器模式Interpreter
1. 解释器模式(Interpreter Pattern)的定义 (1)定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. ①文法:即语法规则.在解 ...
- 设计模式之略见一斑(解释器模式Interpreter)
解释器模式是一种比较难理解的模式,但如果你对Command(命令模式)和Composite(组合模式)很了解的话,你会发现其实解释器模式就是这两种的组合.为何要使用解释器模式,如何用解释器模式呢,这就 ...
- 《研磨设计模式》chap21 解释器模式Interpreter(1)模式介绍
场景:读写xml文件,如果代码"写死了":谁是谁的child,万一文件父子节点改了,又要改代码. 1. 正常编码(不使用模式) public class ReadAppXml {/ ...
- 《研磨设计模式》chap21 解释器模式Interpreter(2)parse模型
1. 定义 读取表达式,构建抽象语法树,叶子类,节点类,context上下文 step1:分解表达式,得到需要解析的元素名称和该元素对应的解析模型 step2:根据节点的属性转换成为相应的解释器对象 ...
- 【白话设计模式二十二】解释器模式(Interpreter)
为什么80%的码农都做不了架构师?>>> #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...
- 解释器模式(interpreter)解析例子
摘要:本文深入浅出的讲述了设计模式中的解释器模式,并给出了简单的示例,例子浅显易懂,并附带源代码. 解释器模式属于行为型模式,其意图是给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该 ...
- Java进阶篇设计模式之九----- 解释器模式和迭代器模式
前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解 ...
- fcq java_Java设计模式百例 - 解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文. 解释器模式在我们开发过程中并不常用 ...
- java interpreter_解释器模式(Interpreter)Java
定义: 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 结构图: AbstractExpression解释器模式 ...
最新文章
- QIIME 2用户文档. 6沙漠土壤分析Atacama soil(2018.11)
- 我的angularjs源码学习之旅2——依赖注入
- Java并发编程的艺术(二)——重排序
- 四十一、Android Notification通知详解
- Android安全开发之浅谈密钥硬编码
- 函数的嵌套调用-函数嵌套调用的执行线路图
- origin master 出现The authenticity of host 'github.com ' can't be established
- 公认音质好的耳机品牌_什么品牌蓝牙耳机音质比较好?2020五款HIFI音质蓝牙耳机推荐...
- Magento : Make 'Continue Shopping' button redirect to the product index page
- mybatis初学习
- 线性表:3.链表,单链表详解与C语言实现
- Mysql一直显示等待中_Mysql中的各种timeout
- python地址簿3.7版本_用python编写地址簿程序的问题
- 四大利器帮你走出IT运维管理的困境
- HighCharts:plotLines基准线与数据相差过大不显示
- linux下安装配置laravel环境,linux下的laravel安装
- 图灵的遗产和后继者们的责任
- RGL: A Simple yet Effective Relation.. 文章详解
- 百度2023校招 内推码IVV4AS
- ESP32 系列之 ESP-IDF 官方构建方案
热门文章
- 基于C语言EOF与getchar()的使用详解
- VC++6.0中使用GDI+绘图(转载)
- Quartz.net官方开发指南 第七课 : TriggerListeners和JobListeners
- java.lang.UnsupportedClassVersionError: JVMCFRE003解决方法--jdk 1.6 中switch的参数无法使用String类型
- 如何解决分布式系统数据事务一致性问题(HBase加Solr)
- 【白皮书分享】2020年度薪酬白皮书.pdf(附下载链接)
- 【报告分享】2020中国时尚跨境电商发展报告.pdf(附下载链接)
- 剑指offer 面试题49. 丑数
- 各种排序算法稳定性比较
- 搜狗浏览器收藏夹在哪_搜狗浏览器居然流氓到操作我的微博账号